您好!
我对 MSP430FRxxx 的 Resource Explorer 中的 I2C 驱动程序代码有一些问题。
在 I2C 驱动程序的 MSP430示例代码中、我找到了一个名为"CopyArray"的函数
```μ A
void CopyArray (uint8_t *源、uint8_t *目标、uint8_t 计数)
{
uint8_t copyIndex = 0;
对于(copyIndex = 0;copyIndex < count;copyIndex++){
dest[copyIndex]= source[copyIndex];
}
}
```μ A
这里的源缓冲器或目的缓冲器似乎没有什么特别的。 是否有任何理由在 memcpy 上使用 CopyArray、这样就允许用户直接将源缓冲区复制到目标缓冲区而不使用循环?
2.在 I2C ISR 中、有一些全局变量用于跟踪 Rx 和 Tx 计数、即`RXByteCtr` 和`TXByteCtr`。 这些全局变量 在 ISR 中和 ISR 外部都被修改。
在`I2C_Master_ReadReg` 函数中、在禁用 Rx 中断之前、这两个变量都被修改(RxByteCtr 设置为 count、TxByteCtr 设置为0):
```μ A
RXByteCtr =计数;
TXByteCtr = 0;
ReceiveIndex = 0;
TransmitIndex = 0;
/*初始化从地址和中断*/
UCB1I2CSA = DEV_addr;
UCB1IFG &=~(UCTXIFG + UCRXIFG); //清除任何挂起的中断
UCB1IE &=~UCRXIE; //禁用 RX 中断
```μ A
类似地、请在`I2C_Master_WriteReg`中进行选择。 这是否会导致 Rx/TxByteCtr 在置1后可能被修改的问题、因为在修改/读取 值之前中断未被禁用? 此外、不应在此 I2C 驱动程序文件中将这些变量声明为易失性和静态变量?
此致、
Samyukta