Em cảm ơn anh Nam, ý anh là đoạn này ạ? Em có đọc qua tutorial này rồi, nhưng em vẫn không hiểu lắm :"> Anh có thể làm ơn giải thích thêm cho em về thao tác truyền dữ liệu sang slave được không ạ?
Trích:
Master có thể ghi dữ liệu mới vào bộ đệm SPI khi dữ liệu cũ đang được dịch ra. Khi
thanh ghi dịch trống thì dữ liệu mới sẽ được chuyển từ bộ đệm vào. Người dùng chỉ
cần chú ý kiểm tra bit SPITBF trong thanh ghi SPIxSTAT tương ứng để tránh ghi vào bộ
đệm khi nó đang chứa dữ liệu.
Cùng lúc với dữ liệu được dịch ra từ bộ đệm truyền, dữ liệu cũng được lấy vào
thanh ghi dịch, và khi bộ đệm nhận đã nhận đủ số bit cần thiết thì dữ liệu sẽ được
chuyển vào bộ đệm nhận , và bit SPIIF sẽ được bật. Nếu ngắt SPI được cho phép, bằng cách bật bit SPIIE, thì một ngắt SPI sẽ được tạo ra. Bit SMP trong thanh ghi SPIxCON
cho phép chọn vị trí lấy mẫu dữ liệu vào, ở giữa hay cuối mỗi chu kỳ của bit.
Bit SPIRBF trong thanh ghi SPIxSTAT cho biết bộ đệm nhận có dữ liệu. Nếu dữ liệu
này không được đọc ra khi thanh ghi dịch hoàn tất thao tác dịch dữ liệu mới vào thì sẽ
xảy ra tràn bộ đệm nhận, với bit SPIROV trong thanh ghi SPIxSTAT được bật. Khi đó
dữ liệu mới sẽ không được chuyển vào bộ đệm và bị mất.
|
Có nghĩa là nếu em config giao tiếp 8-bit, sau khi SPIxSR nhận 8 bit, 8 bit này sẽ được chép vào SPIxRXB rồi sẽ cần được đọc ra để tránh tràn và mất dũ liệu?
Em xin lỗi nếu em lại đọc sót phần quan trọng :P, nhưng em vẫn không hiểu thao tác truyền dữ liệu. Đoạn trên là nhân dữ liệu từ slave, vậy nếu em muốn gửi dữ liệu, em cần viết vào SPIxBUF, thì vẫn là viết 16 bit phải không ạ? Hay là em phải dùng lệnh mov.b? (Em đang tập viết bằng hợp ngữ)
Em cảm ơn anh nhiều ạ.