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.

[参考译文] TMS570LC4357:引脚多路复用器和 N2HET 模块中的设置错误

Guru**** 2474710 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1036060/tms570lc4357-setting-wrong-in-pinmux-and-n2het-module

器件型号:TMS570LC4357

您好:

   我想将物理引脚"D3"设置为输入 GPIO、该引脚具有两个功能:"N2HET2[12]"和"MIBSPI2NENA"。

   此时、以下代码 是"pinmux"模块和"N2HET[12]"模块的设置:

   引脚多路复用:

pinMuxReg->PINMUX[97] = SIGNAL_N2HET2_12_D3 | SIGNAL_N2HET2_13_D2 | SIGNAL_N2HET2_14_D1 | SIGNAL_N2HET2_15_K4; // n2het2[12]
....
....
	PINMUX_GATE_EMIF_CLK_ENABLE(ON);
	PINMUX_EMIF_OUTPUT_ENABLE(ON);
	PINMUX_GIOA_DISABLE_HET1_ENABLE(OFF);
    PINMUX_GIOB_DISABLE_HET2_ENABLE(OFF);
    PINMUX_ETHERNET_SELECT(MII);
    PINMUX_ALT_ADC_TRIGGER_SELECT(1);

  N2HET[12]:

   hetREG2->DOUT = (uint32)((uint32)0U << 12U);
   hetREG2->DIR = (uint32) 0x00000000U; // all pin are input
   hetREG2->PDR = (uint32) 0x00000000U;// Set HET pins open drain enable
   hetREG2->PULDIS = (uint32) 0x00000000U;//Set HET pins pullup/down enable
   hetREG2->PSL = (uint32) 0x00000000U;//Set HET pins pullup/down select 
   hetREG2->HRSH = (uint32) 0x00001000U;//Set HET pins high resolution share
   hetREG2->AND = (uint32) 0x00000000U; //- Set HET pins AND share 
   hetREG2->XOR = (uint32) 0x00000000U;//Set HET pins XOR share
    /** - Setup prescaler values
    *     - Loop resolution prescaler
    *     - High resolution prescaler
    */
    hetREG2->PFR = (uint32)((uint32) 6U << 8U)
                | ((uint32) 0U);

   /** - Parity control register
    *     - Enable/Disable Parity check
    */
    hetREG2->PCR = (uint32) 0x00000005U;
    (void)memcpy((void *)hetRAM2, (const void *)het2PROGRAM, sizeof(het2PROGRAM));
    hetREG2->PFR = (uint32)((uint32) 6U << 8U)
                | ((uint32) 0U);
    hetREG2->INTENAC = 0xFFFFFFFFU;
    hetREG2->GCR = ( 0x00000001U 
                   | (uint32)((uint32)0U << 24U)
	               | (uint32)((uint32)1U << 16U)
                   | (0x00020000U));

   目的是将 D3设置为 GPIO 输入引脚、因此我将 D3设置为 N2HET[12]。 我要实现的这里的逻辑是下面的。

if ((gioPORT->DIN & (0x1 << FORCED_UPDATE_PIN)) == 0)
	{
	   do_uart_update();
	}
else
   {
    do_nothing;
   }

结果是、当我为 D3提供3.3V 电压时、没有发生任何情况、我的设置是否有任何问题?

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

    您好!

    引脚多路复用配置正确。  

    如果你想将 N2HET2[12]用作 GPIO、N2HET2[12]不应该被用在 NHET RAM 中运行的 N2HET 代码中:

    您可以使用 GIO API 来控制 N2HET 引脚:

    例如、gioTogleBit (hetPORT2、12);->切换 N2HET2[12]

    不能使用 GIO 端口指针来访问 N2HET 寄存器:

    如果((gioPORT->DIN &(0x1 << FORUD_UPDATE_PIN))=0)

    请更改为:

    if ((hetPORT2->DIN &(0x1 <<12))=0) -->如果 N2HET2[12]为低电平

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

    谢谢,QJ。  

    1.我想我需要将 PWM2引脚12更改为其他数字。

    2.我是否需要此代码(void) memcpy ((void *) hetRAM2、(const void *) het2PROGRAM、sizeof (het2PROGRAM));?

    3.使用此逻辑“if ((hetPORT2>DIN &(0x1 <<12))=0)”

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

    您好、QJ

    1.我将 PWM2引脚从12更改为13,并使用逻辑作为“if (hetPORT2->DIN &(0x1 <<12)=1)”,然后执行某些操作,但它仍然不起作用。

    然后、我注释(void) memcpy ((void *) hetRAM2、(const void *) het2PROGRAM、sizeof (het2PROGRAM);、但它仍然不起作用。

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

    如果你不使用 NHET 来输出 PWM、和捕捉输入等、你不需要将 NHET 代码复制到 NHET RAM:

      //(void) memcpy ((void *) hetRAM2、(const void *) het2PROGRAM、sizeof (het2PROGRAM);

    您是否为 N2HET2[12](引脚 D3)提供输入?