andrey_ae (29.04.2007 23:31, просмотров: 1692)
Проблемы с пониманием SPI Пишу для ADuC845. Вот простой пример:
<c>
#include <stdio.h> /* prototype declarations for I/O functions */
#include <ADUC845.H>
#include <intrins.h>
char c;
bit complite = 0;
void spi_test(void) interrupt 7{
c = SPIDAT;
complite = 1;
}
void main (void) {
char c;
P2 = 0xFF;
SCON = 0x50;
SPICON = 0x30;
TMOD |= 0x20;
TH1 = 221;
TR1 = 1;
TI = 1;
IEIP2 |= 0x01;
EA = 1;
while (1) {
SPIDAT = 0xAF;
while (!complite);
printf ("%x\n", c);
}
}
</c>
В начале инициализация таймера, SPI, прерываний.
Потом кладу в SPIDAT что-нибудь. Как я понимаю, дальше МК начинает передачу, а когда она завершена, выставляется прерывание, которое я обрабатываю: забираю пришедшие данные и выставляю флажок, что всё получено. Так ли это? Может я что-то пропустил? Проверить на реальном образце пока не получится, поэтому тестирую в дебагере mVision. Там есть симуляция SPI, но что-то либо он так работает, либо я просто чего-то не знаю...
Спасибо.