【发布时间】:2015-08-16 22:27:25
【问题描述】:
我正在尝试使用 9s12 连接 2 个 MAX7219 驱动程序。 我的问题是,当我发送数据时,锁存脉冲发生在 SPI 传输完成之前。 http://imgur.com/BGd1sB9
附图显示了 SPI 时钟和数据仍在发送时发生的脉冲。
void MAX7219Init(void)
{
INT8U count =0;
setLow(PORTP, PIN6); /* Need to set low on startup */
for (count = 1; count <= 2; count++){ //Run twice to send data to 2 max7219
spimx(0x0F, 0xCD);
}
pulse(PORTP, PIN6);
while (1) ;
}
void spimx(INT8U address, INT8U data)
{
while((SPI0SR & SPTEF) == 0){} /*Wait for previous transmit */
SPI0DR = (INT8U)(address & 0b00001111); /*Initiate a transfer */
while((SPI0SR & SPIF) == 0){} /*Wait for new data */
while((SPI0SR & SPTEF) == 0){} /*Wait for previous transmit */
SPI0DR = data; /*Initiate a transfer */
while((SPI0SR & SPIF) == 0){} /*Wait for new data */
}
什么可能导致这个脉搏过早? 我希望我的问题是有道理的。 谢谢
【问题讨论】:
-
我想你在别处初始化了 SPI?实际上,我认为这也属于这里。此外,您可能想了解stdint.h。这个头提供了 8 位无符号和类似数据类型的标准名称,每个人应该都能理解。您使用的 ae 名称在某种程度上是 C99 标准之前的遗留物。