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.

[参考译文] CCS/RM48L952:CANRx 作为 GIO

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/680916/ccs-rm48l952-canrx-as-gio

器件型号:RM48L952

工具/软件:Code Composer Studio

您好!

为了将 CAN3Tx 管脚配置为 GIO、使用了以下代码

canREG3->TIOC = canREG3->TIOC |  0x00000002;//引脚高电平
canREG3->TIOC = canREG3->TIOC & 0xFFFFFFFD;//引脚 低电平

其中:TIOC 在  canBase  volatile 结构中定义如下:

uint32 TIOC;/**< 0x01E0:TX IO 控制寄存器*
uint32 RIOC;/**< 0x01E4:RX IO 控制寄存器*/

我想知道将 CAN3Rx 管脚设置为 GIO 的代码。

另外、让我们知道 CANxTx 和 CANxRx 是否都应设置为高电平、或者两个引脚是否应设置为低电平而不发生任何冲突?

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

    您需要复位位位位位位3以禁用 CAN 功能模式。
    2.通过设置位2将引脚配置为输出
    然后将0或1写入位1以切换引脚
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是否有任何应用手册可供我参考以获得更详细的说明?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是否有任何应用手册可供我参考以获得更详细的说明?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能详细说明一下这一答复吗?


    我想知道用于将 RIOC 引脚切换为高电平和低电平的代码
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    这是我为您编写的代码。 只有当 CAN 控制寄存器的 Init 位被置位时、IO 控制寄存器的值才可写入。 当 CAN 控制寄存器的 Init 位被复位时、CAN TX IO 控制寄存器的 OD、Func、Dir 和 OUT 位被强制为特定的值。

    代码用于切换 CAN1 TX 引脚和 RX 引脚。 我刚刚测试了代码、它运行良好。

    canInit();
    for (i=0;i<100;i++){
    for (j=0;j<0x10000;j++);
    canREG1->CTL |= 0x00000001;
    如果(ti = 0){
    TI=1;
    }否则{
    TI=0;

    canREG1->TIOC =(UINT32)((UINT32) 1U <<18U)
    |(uint32)((uint32) 0U <<17U)
    |(uint32)((uint32) 0U <<16U)
    |(UINT32)((UINT32) 0U <<3U)/*GIO 模式*/
    |(uint32)((uint32) 1U << 2U)/*输出*/
    |(uint32)((uint32) ti << 1U);/*高*/

    canREG1->RIOC =(UINT32)((UINT32) 1U <<18U)
    |(uint32)((uint32) 0U <<17U)
    |(uint32)((uint32) 0U <<16U)
    |(uint32)((uint32) 0U << 3U)
    |(uint32)((uint32) 1U <<2U)
    |(uint32)((uint32) ti <<1U);
    canREG1->CTL &= 0xFFFFFFFE;