我需要使用我的LPC1769将某些数据发送到带有SPI的FPGA。但是我不太明白我应该怎么做。我目前有这个代码,最终在hardfault处理程序中。我不允许使用CMSIS,因此我必须自己定义寄存器。
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 :(得分:1)
您绝对不希望像现代微控制器那样将数据丢包到SPI总线上。
如果由于某种原因您不允许使用CMSIS,我建议您查看how CMSIS does SPI communication。打开它(或者更好的是:打印出来),然后使用LPC176x/5x User Manual中的“第17章:LPC176x / 5x SPI”作为参考(第410-420页)。代码应该很容易理解。
简而言之,您需要:
不要忘记使用中断,你的CPU周期最好用于处理数据(尤其是轮询状态寄存器,不幸的是非常常见错误)。