工具/软件:Code Composer Studio
尊敬的团队:
我的客户正在使用 具有 DMA 模式的 MSP430FR5738 I2C。 他在调试 FR5738时遇到问题、这似乎是430微控制器中的一个错误。
1. P1.6/1.7配置为 I2C 从机通信模式,I2C 从机 RX 和从机 TX 配置为 DMA 模式。 配置代码如下:
由于 I2C 接受数据、因此接收长度不是提前知道的。 因此、当接收到 DMA 时、它表示一帧数据的末尾
当 STOP 信号到达时、当 STOP 信号到达时、当前 DMA 传输结束。
I2C 配置
空 I2C_Slave_Init (无符号字符地址)
{
UCB0CTLW0 |= UCSWRST;//复位 I2C 模块
UCB0CTLW0 |= UCMODE_3 + UCSYNC;//I2C 从器件
UCB0CTLW1 &=~USCI_I2C_UCCLTOIFG;
UCB0CTLW1 |=(0x01 <<6);
UCB0I2COA0 =地址+ UCOAEN;//I2C 地址
//set P1.6 & P1.7 on I2C mode
P1SEL1 |= BIT6 + BIT7;
P1SEL0 &=~BIT6;
P1SEL0 &=~BIT7;
UCB0CTLW0 &=~UCSWRST;//释放复位 I2C 模块
UCB0IE_I2C |= UCSTPIE;//启用 I2C 中断
}
I2C 从机 RX DMA 配置
空 I2C_Slave_RX_DMA_Config ()
{
DMA0CTL =
(0x00 << 12)//单次传输
|(0x03 << 10)//Dest Inc
|(0x00 << 8)//src 不变
|(0x01 << 7)
|(0x01 << 6);
DMA0SA =(无符号整型)&UCB0RXBUF;
DMA0DA =(无符号 int) buf;
DMA0SZ = 40;
DMACTL0 |= 18;//MSP430FR5738 I2C 从器件 RX 触发器
DMA0CTL |= DMAIE;
DMA0CTL |= DMAEN;
}
switch (__evo_in_range (UCB0IV、0x1E))
{
情况0x08:
if (UCB0CTLW0_bit.UCTR = 0)//接收
{
DMA I2C 从机 RX 重新配置
}
else //发送器
{
DMA I2C 从器件 TX 重新配置
}
UCB0IFG = 0;
中断;
默认值:
中断;
}
MAIN ()
{
…
I2C_Slave_Init();
I2C_Slave_RX_DMA_Config ();
_EINT();
while (1)
{
(笑声)
…
//P2DIR_BIT.P2DIR2 = 1;μ A
}
}
A)如果 while (1)循环中涉及 IO 寄存器的配置、则 I2C 从机 RX DMA 接收会有问题。
目前检测到两种情况。 一个是停止信号未被识别、并且不会产生中断。 另一个是已生成中断 IFG 标志、但没有中断服务例程。 如果它在仿真器中暂停一次、然后以全速运行、则中断服务例程
b)如果在 while (1)中 IO 端口上没有操作、则整个 I2C 从机 RX DMA 没有问题。
请帮助。
BR、
Susan