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.

[参考译文] 编译器/MSP432P401R:驱动程序问题

Guru**** 2611385 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/663626/compiler-msp432p401r-drivelib-question

部件号:MSP432P401R

工具/软件:TI C/C++编译器

您好,

我正在尝试将代码I2C转换为CMSIS寄存器,但我遇到了一些问题,我在驱动程序上选取了I2c.c文件,现在我尝试将代码转换为CMSIS寄存器,但我不理解某些部分,有人能帮我吗? 我举一个示例 ,说明如何转换这段代码:

//如果不使用中断,则轮询标志
如果(!BISTBAND_PERI(EUSSCI_B_CMIS(moduleInstance)->IE, EUSCI_B_IE_TXIE0_OFS))
{
//传送中断标志轮询。
同时
(!BISTBAND_PERI(EUSI_B_CMSIS (moduleInstance)->IFG,EUSCI_B_IFG_TXIFG0_OFS))
;}


//发送单字节数据。
EUSCI_B_CMSIS (moduleInstance -->TXBUF = txData; 

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

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

    您好,Amit Ashara,

    我不理解代码"BITBAND_PERI",如果我必须将代码转换为CMSIS,我会按以下方式进行...

    IF(EUSSCI_B0->IE |= EUSCI_B_IE_TXIE0){
    
    while (!(EUSSCI_B0->IFG|= EUSCI_B_IFG_TXIFG0));
    
    }
    
    //发送单字节数据。
    EUSCI_B0->TXBUF = txData;
    

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

    您尝试执行的是逻辑OR操作,而不是检查布尔条件。 它可能不起作用,而是产生一些意外结果。 为什么要在DriverLib API已存在时在CMSIS中执行该操作。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    问题是,我的所有代码都是在CMSIS寄存器中写入的,所以我需要或者我必须在CMSIS中集成这个I2C库才能与我的所有代码一起使用。 这是我的困难
    我不明白BITBAND_PERI是怎么做的

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

    您应该已经了解了BITBAND_PERI的定义

    /*具有8位或16位寄存器存取的外设仅允许8位或16位频带存取,因此始终转换为8位*/
    #define BITBAND_PERI(x, b)(*((__IO uint8_t *)(BITBAND_PERI_BASE +((UINT32_t)(volatile const UINT32_t *)&(x))- Periph_base)*32+(b)*4))
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢Amit Ashara