您好!
这是我的一个特别的地方
这些例子应该是良好做法的典范-它们应该是干净的、有充分的文件记录并且希望是正确的;这些评论应该是适当的并且不会误导...
考虑 以下来自 eusci_b_i2c_ex5_masterMultipleSlave.c 的 I2C 示例 ISR:
void USCIB0_ISR (void) { switch (__evo_in_range (UCB0IV、0x1E)) { 情况0x00:break; //向量0:无中断中断; 情况0x02:break; 情况0x04: EUSCI_B_I2C_masterSendStart (EUSCI_B0_BASE); 中断; //向量4:NACKIFG 中断; 情况0x06:break; //向量6:STTIFG 中断; 情况0x08:break; //向量8:STPIFG 中断; 情况0x0a:中断; //向量10:RXIFG3中断; 情况0x0c:中断; //向量14:TXIFG3中断; 情况0x0E:中断; //向量16:RXIFG2 break; 情况0x10:中断; //向量18:TXIFG2中断; 情况0x12:中断; //向量20:RXIFG1 break; 情况0x14:中断; //向量22:TXIFG1中断; 情况0x16:中断; //向量24:RXIFG0中断; 情况0x18: IF (TXByteCtr) //检查 TX 字节计数器 { EUSCI_B_I2C_masterSendMultiByteNext (EUSCI_B0_BASE、 TXData[SlaveFlag]); TXByteCtr --; //减量 TX 字节计数 器} 其他 { EUSCI_B_I2C_masterSendMultiByteStop (EUSCI_B0_BASE); _BIC_SR_REGISTER_ON_EXIT (CPUOFF);//退出 LPM0 } 中断; //向量26:TXIFG0中断; 默认值:break; } }
这里的两个主要内容是它
- 矢量标签的注释不同步/错误、
- 这应该是 driverlib 编码的一个例子-为什么不用它们的符号等效函数替代"魔法"字面量? 所有正确(希望)的符号名称都位于 driverlib 头文件中,当然它们应该被使用……
例如(不是示例-只需从我正在处理的项目中剪切-粘贴):
Declate_isr (USCI_B0_Vector、USCIB0_ISR) { //这些是 USCI 开关的 I2C 定义(_偶_IN_RANGE (UCB0IV、USCI_I2C_UCBIT9IFG)) { 案例 USCI_NONE://无中断 ; 案例 USCI_I2C_UCALLIFG (USCI_USCI_IN_IN_IN_ENTRIBUSCI/ UCCUSCI_EN/USCI_IN_IN_CLK 中断/仅限已接收的 USCI_INTRIBUSCI_ENTRIBUSCI_EN/USCI_IN_ENTRIBUSCI_USCI_ENTREMENT/ USCI_USCI_IN_ENTREM_ENTREMENT/ USCI_ 案例 USCI_I2C_UCSTTIFG://使用自身地址检测到起始条件(仅从模式) 中断; 案例 USCI_I2C_UCSTPIFG://检测到停止条件(主从模式) 中断; 案例 USCI_I2C_UCRXIFG3:// RXIFG3 中断; 案例 USCI_I2C_UCTXIFG2:/ 案例 TXIFG2: / USCI_USCI_USCI_USCI_USCI_USCI_USCI_USCI_USCI_USCI_USCI_USCI_USCI_USCI_USCI_TRIFG 中断;案例 TXIFG2:/TXIFG 中断/ TXIFG 案例 USCI_I2C_UCTXIFG1:// TXIFG1 中断; 案例 USCI_I2C_UCRXIFG0:// RXIFG0 中断; 案例 USCI_I2C_UCTXIFG0:// TXIFG0 中断; 案例 USCI_I2C_UCBCNTIFG://达到字节计数限值(UCBUSCI_I2C_UCTXIFG0 中断):// TXIFG 挂起时钟周期太低;案例 USCI_USCI_CLUSCI_USCI_USCI_USCI_CLUSCI_CLUSCI_USCI_USCI_CLUSCI_CLUSCI 时钟中断://挂起超时 //在发送 (用于调试)中断的第9位生成; }