Bài trước: +Bài 5: Truyền Thông Nối Tiếp RS232 - Xử Lý Chuỗi Trong CCS
Bài sau: +Bài 7: Các Ngắt Trong PIC
Bài 6: Giao Tiếp SPI
I / GIAO TIẾP SPI
+ Đây là giao tiếp dễ dùng nhất , đơn giản nhất , tốc độ cao nhất trong nhóm . hoạt động theo cơ chế hand-shaking, bắt tay . Giả sử có 2 VDK , thì 1 là master , 1 là slave . Khi master truyền 1 byte cho slave , nó phát 8 xung clock qua đường clock - SCK nối tới slave , đồng thời truyền 8 bit data từ chân SDO tới chân SDI của slave. Không kiểm tra chẵn lẻ , lỗi . Do đó Ví dụ nếu đang truyền được 3 bit mà master reset hay hở dây clock thì data bị mất , slave sẽ không nhận đủ 8 bit và do đó nếu tiếp tục nhận nó sẽ lấy 5 bit ở byte kế tiếp đưa vào thanh ghi nhận để đủ 8 bit ( và để kích ngắt ) . Từ đó trở đi là mọi giá trị nhận là sai bét trừ phi chấm dứt và sau đó thiết lập lại giao tiếp này ( ở cả hai ) .
+ Giao tiếp này cần ít nhất 2 dây trở lên . Nếu 1 VDK chỉ cần gởi data thì chỉ cần dây clock và SDO .VDK nhận sẽ dùng SDI và dây clock . Dây clock là nối chung .
+ Nếu có gởi và nhận ở cả 2 VDK thì : dây clock chung , master có SDO nối tới SDI của slave , SDO của slave nối tới SDI của master .
+ Nếu master cần truyền data cho nhiều slave trở lên thì SDO master nối tới các SDI của slave .
+ Chân SS là slave select .
+ SPI hoạt động từ phần cứng , vì nó có sẵn thanh ghi gởi và nhận , nhận đủ giá trị thì có cờ ngắt phục vụ .
+ Danh sách các hàm :
1 / Setup_spi (mode )
Setup_spi2 (mode )
+ Dùng thiết lập giao tiếp SPI . Hàm thứ 2 dùng với VDK có 2 bộ SPI .
+ Tham số mode :là các hằng số sau , có thể OR giữa các nhóm bởi dấu |
I SPI_MASTER , SPI_SLAVE , SPI_SS_DISABLED
II SPI_L_TO_H , SPI_H_TO_L
III SPI_CLK_DIV_4 , SPI_CLK_DIV_16 , SPI_CLK_DIV_64 , SPI_CLK_T2
+ Nhóm I xác định VDK là master hay slave ,slave select
+ Nhóm II xác định clock cạnh lên hay xuống .
+ Nhóm III xác định tần số xung clock , SPI_CLK_DIV_4 ngĩa là tần số = FOSC / 4 , tương ứng 1 chu kỳ lệnh / xung .
+ Hàm không trả về trị .
+ Ngoài ra ,tuỳ VDK mà có thêm 1 số tham số khác , xem file * .h .
2 / Spi_read ( data )
Spi_read2 ( data )
+ data có thể có thêm và là số 8 bit . Hàm thứ 2 cho bộ SPI thứ 2 .
+ Hàm trả về giá trị 8 bit: value = spi_read ( )
+ Hàm trả về giá trị đọc bởi SPI . Nếu value phù hợp SPI_read ( ) thì data sẽ được phát xung ngoài và data nhận được sẽ được trả về . Nếu không có data sẵn sàng , spi_read ( ) sẽ đợi data .
+ Hàm chỉ dùng cho SPI hardware ( SPI phần cứng ) .
3 / Spi_write ( value )
Spi_write2 ( value )
+ Hàm không trả về trị . value là giá trị 8 bit .
+ Hàm này gửi value ( 1 byte ) tới SPI , đồng thời tạo 8 xung clock .
+ Hàm chỉ dùng cho SPI hardware ( SPI phần cứng ) .
4 / Spi_data_is_in ( )
Spi_data_is_in2 ( )
+ Hàm trả về TRUE ( 1 ) nếu data nhận được đầy đủ ( 8 bit ) từ SPI , trả về false nếu chưa nhận đủ .
+ Hàm này dùng kiểm tra xem giá trị nhận về SPI đã đủ 1 byte chưa để dùng hàm spi_read ( ) đọc data vào biến .
Tham Khảo:
Code mẫu cho PIC - Giao tiếp SPI song công giữa 2 VĐK PIC
(Nguồn: TRẦN XUÂN TRƯỜNG)
Như vậy làm sao mình sát định chân SDI, SDO.... của giao tiếp SPI trên PIC mong bạn giúp.
Trả lờiXóaĐối với từng loại Vi xử lý thì có các chân giao tiếp SPI cố định.
Trả lờiXóaVí dụ: PIC16F877A ở hình trên có chân SDI-23, SDO-24, SCK-18.
Thân!
Bạn cho mình hỏi làm thế nào để xử lý gói data 12 bit từ IC ADC 12bit, vì mình thấy một khung truyền SPI chỉ cho phép 8 bit
Trả lờiXóa