Lập Trình PIC – Bài 6: Giao tiếp SPI với PIC16f877A

Lập Trình PIC – Bài 6: Giao tiếp SPI với PIC16f877A 1

GIAO TIẾP SPI VỚI PIC16F877A

I. GIỚI THIỆU GIAO TIẾP SPI:

Lập Trình PIC – Bài 6: Giao tiếp SPI với PIC16f877A 1

  • Đâ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 .

Bài viết liên quan

Để lại một bình luận

0
0
Giỏ Hàng
Giỏ hàng trốngChưa có sản phẩm nào trong giỏ hàngQuay lại cửa hàng