主题中讨论的其他器件: TM4C123
您好!
我在 TM4C123GH6PM 上使用 I2C 从模式、因此 I2C 主设备(Raspberry PI)可以访问一个32字节的数组、并不断进行计算。
我有时注意到、我的从器件返回。 (32个数组、包含所有255个)
我正在使用多个计时器、其中一个计时器以10Hz 的频率更新、另一个100Hz 的频率更新、最后一个 LED 计时器以2Hz 到5Hz 的频率更新。
由于无法调试该问题、我已开始注释、我使用了不同的计时器、并尝试查找导致该问题的原因。
我最终发现、正是使用计时器通过 SSI1点亮串行 LED。 也就是:
我初始化时:
// initialize led driver
MAP_SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI1);
MAP_GPIOPinConfigure(GPIO_PF2_SSI1CLK);
MAP_GPIOPinConfigure(GPIO_PF1_SSI1TX);
MAP_GPIOPinTypeSSI(GPIO_PORTF_BASE, GPIO_PIN_1 | GPIO_PIN_2);
MAP_SSIConfigSetExpClk(SSI1_BASE, ui32SysClkFreq, SSI_FRF_MOTO_MODE_0, SSI_MODE_MASTER, 2400000, 8);
MAP_SSIEnable(SSI1_BASE);
定时器触发部件:(连续15次)
#define SPILONG 0xE0
#define SPISHORT 0x40
void send_byte(unsigned char b) {
unsigned char bit;
for(bit = 0; bit < 8; bit++) {
if(b & 0x80) { MAP_SSIDataPut(SSI1_BASE, SPILONG); } else { MAP_SSIDataPut(SSI1_BASE, SPISHORT); }
b <<= 1;
}
}
此外、在调用 SSIDataPut (ss!_BASE、byte)后、要发送我调用的字节:
while(MAP_SSIBusy(SSI1_BASE)) {}
因此、我通过实验确定了当 MAP_SSIDataPut (SSI1_base、SPILONG)正在运行时、如果 tm4c123从设备接收到读取请求、它将返回全部。
我甚至将器件 I2CSlaveDataPut (I2C0_BASE、buffer[index+])更改为 I2CSlaveDataPut (I2C0_BASE、1);-但是、当两个中断发生冲突时、i2c 从器件返回错误的数据。
一
有什么解决方法、或导致这种情况的原因? 它们是不同的器件、微控制器上的 I2C 和 SSI、甚至端口也不同、这是为什么呢?
此致、
CAN A.