This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP430FR5969:MSPware/driverlib v3.60.00.10 I2C 示例

Guru**** 2350610 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/585827/msp430fr5969-mspware-driverlib-v3-60-00-10-i2c-examples

器件型号:MSP430FR5969

您好!

这是我的一个特别的地方

这些例子应该是良好做法的典范-它们应该是干净的、有充分的文件记录并且希望是正确的;这些评论应该是适当的并且不会误导...

考虑 以下来自 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;
}
} 

这里的两个主要内容是它

  1. 矢量标签的注释不同步/错误、  
  2. 这应该是 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位生成;
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Nick、

    这是一个很好的反馈、我会将您的问题提交给 DriverLib 支持团队、以便在未来的修订中解决您的问题。

    此致、
    Ryan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ryan、

    我不想看起来很油酸或不感激-我喜欢 MSP430、真的很喜欢 DriverLib、但我对代码质量非常挑剔(我的团队也是如此)。 我像每个人一样犯了错误、编码和风格是复杂的主题:工程、艺术、科学、对出色工作的自豪感以及个人喜好都发挥了作用。

    因此、当我编写代码时、即使在设计和实施大型、复杂的实时交换交易系统30年后、我所做的一切都是经过同行审核并通过 QA 流程执行的、即使它只是一个编码示例。 为自己编写代码是一回事;其他人使用、学习和必须支持的代码则是另一回事。 如果我为自己制定法规、我就同样重要-自满情绪会在其他方面有所不同。

    "即使只是一个编码示例"、而不是一个好词-教学材料应该是良好实践的核心、示例、而不是要轻视的东西。

    因此、我觉得奇怪的是、我在 DriverLib 中看到的一些编码示例会失败、原因很多、是我在业界经历过的最基本的商业同行评审和 QA 流程。

    TI 免费提供(现在)的绝大多数 CCS 环境都非常出色-我发现它是一个很好的开发环境(尤其是与 Analog Discovery II 结合使用)、 但我确实想知道一些示例代码是如何被淘汰的-这是我们对 TI 可接受代码质量的了解;它应该传达卓越的表现并告知...

    请拥有在结构化、QA 驱动的环境中工作的经验丰富的开发人员、他们了解编码标准、浏览示例并提高其质量。 这不是实习生/学生/一些黑客/其他人的工作、而是一个了解质量、公正对待令人惊叹的产品的人的工作、对他们所做的事感到自豪、并知道如何传达信息、即进行教学的人的工作。

    是的、这是一项投资、但这是一项相对便宜的(如果是无形的)收益。

    太棒了!

    编辑:如果听起来很苛刻-这并不意味着-这意味着建设性!