2016-04-19 3 views
0

Мне нужно отправить определенные данные в FPGA с SPI, используя мой LPC1769. Однако я не совсем понимаю, как я должен подходить к этому. В настоящее время у меня есть этот код, который заканчивается обработчиком hardfault. Мне не разрешено использовать CMSIS, поэтому я должен сам определять реестры.SPI периферийный на LPC1769

void sendData(uint8_t *buf, uint32_t Length) { 
    uint32_t i; 
    for (i = 0; i < Length; i++) { 
     while (S0SPSR != (1 << 7)) { 
      S0SPDR = *buf; 
      gpio0WritePin(15, 1); 
      gpio0WritePin(15, 0); 
      buf++; 
     } 
    } 
return; 
} 

и моя главная функция:

uint8_t TX[16]; 
int main(void) { 
    SpiInit(); 
    TX[0] = 0x48; 
    TX[1] = 0x65; 
    TX[2] = 0x6c; 
    TX[3] = 0x6c; 
    TX[4] = 0x6f; 
    while (1) { 
     SPI_Begin(); 
     sendData((uint8_t*)TX, 5); 
     SPI_End(); 
    } 
} 
+0

проблема может быть в любом месте, особенно в коде, который здесь не показан. Вам нужно будет отладить его. Изучите свои регистры состояния неисправности и отследите их. –

+0

Если я изменил указатели от buf на стандартные массивы, он больше не окажется в жестком обработчике ошибок – Arrrow

ответ

1

Вы определенно не хотите идти немного стучать данных на шине SPI, как это с такого рода на современных микроконтроллерах.

Если по какой-то причине вам не разрешено использовать CMSIS, я бы предположил, что вы смотрите на how CMSIS does SPI communication. Откройте это (или еще лучше: распечатайте его) и используйте «Глава 17: LPC176x/5x SPI» из LPC176x/5x User Manual в качестве ссылки при прохождении (страницы 410-420). Код должен быть достаточно прост.

В двух словах, что вам нужно:

  • включение контроллера SPI через управление питанием для периферийных устройств регистра,
  • настройки и включить часы для этого периферийного устройства (Perpheral Clock Selection регистра),
  • сконфигурируйте контакты ввода/вывода, связанные с SPI (MOSI, MISO, CLK, CS), полярность часов и т. Д. Через регистр управления SPI,
  • установочные прерывания, поэтому вам не нужно тратить время на зависание статуса регистры, ожидая появления новых данных,
  • чтение и запись данных 8 бит за раз с использованием регистра данных SPI.

Не забудьте использовать прерывания, ваши циклы процессора лучше всего использовать хруст данных, чем все остальное (особенно опроса регистров состояния, очень распространенная ошибка, к сожалению).

Смежные вопросы