GIAO TIẾP SPI VỚI PIC16F877A
I. GIỚI THIỆU 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ụ .
II.Danh sách các hàm :
1.Setup_spi (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 )
- 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 .