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[12]作为GIO脚,配置 寄存器失败

Part Number: TMS570LC4357
Other Parts Discussed in Thread: HALCOGEN

你好:

   由于我的4357芯片的GIO引脚几乎全被占用,留给我做为输入的IO脚不好焊线,所以我打算使用N2HET作为普通的IO脚来使用,但是我在进行配置的时候遇到了些问题:

    首先,我想将N2HET2 pin配置为 IO输入,下拉,没有 open-drain,一旦检测到外部输入的高电压我将进行下一步动作。

   1. 我使用的芯片封装是TMS5704357BZWTQQ1R,其中使用的物理引脚是"D3",对应的PINMUX功能是"N2HET2[12]/MIBSPI2NENA",因此我在data sheet 中的"I/O Multiplexing and Control Module (IOMM)"中的功能选择里面找到了"Control of Multiplexed Inputs",于是就找到了"PINMMR97[0]",将它设置为输入。

pinMuxReg->PINMUX[97] = SIGNAL_N2HET2_12_D3 | SIGNAL_N2HET2_13_D2 | SIGNAL_N2HET2_14_D1 | SIGNAL_N2HET2_15_K4; // n2het2[12]

   2. 随后我在N2HET2的寄存器里面,使用HALCON工具对N2HET2[12]进行了配置,最终生成了代码

 

hetREG2->GCR = ( 0x00000001U | (uint32)((uint32)1U << 24U)| (uint32)((uint32)1U << 16U)| (0x00020000U));
    hetREG2->INTENAC = 0xFFFFFFFFU;
    hetREG2->INTENAS =  0x00000000U;

    hetREG2->PFR = (uint32)((uint32) 6U << 8U)| ((uint32) 0U);
	
    // Enable/Disable Parity check
    hetREG2->PCR = (uint32) 0x00000005U;

    /** - Fill HET RAM with opcodes and Data */
    (void)memcpy((void *)hetRAM2, (const void *)het2PROGRAM, sizeof(het2PROGRAM));

    //Setup prescaler values
    hetREG2->PFR = (uint32)((uint32) 6U << 8U)| ((uint32) 0U);
    // Set the default value of pin
    
    hetREG2->DOUT = (U32)((U32)0U << FORCED_UPDATE_PIN);
 
    // Set the N2HET2[3] pin as input
    hetREG2->DIR = (U32)((U32)0U << FORCED_UPDATE_PIN);

    // Enable the pull up/down.
    hetREG2->PULDIS = (U32)((U32)0U << FORCED_UPDATE_PIN);
		
    // Enable the pull down.
    hetREG2->PSL = (U32)((U32)0U << FORCED_UPDATE_PIN);

    //hetREG2->HRSH = (U32)((U32)1U << FORCED_UPDATE_PIN);

    //Set HET pins open drain enable 
    hetREG2->PDR = (uint32) 0x00000000U;
	
    // Check the pin if high then update.
    if ((hetREG2->DIN & (0x1 << FORCED_UPDATE_PIN) ) == 1)
    {
       
       CPUUPDATE=1;
    }

   我按照这样设置完成之后,给D3引脚输入3.3V,但实际上没有任何效果,请问我是遗漏了什么部分吗? N2HET部分代码就是HALCON生成的,pinmux那部分我也是按照HALCON修改的

  • 感谢您对TI产品的关注!为更加有效地解决您的问题,我们建议您将问题发布在E2E英文技术论坛上,将由资深的英文论坛工程师为您提供帮助。

    https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/ 

  • 我的公司邮箱屏蔽了英文论坛发来的激活邮件,导致了我没办法去英文论坛问

  • 您可以先参考一下下面的讨论,若还是不能正确配置的话,我会在英文E2E发帖

    https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/608025/ccs-tms570lc4357-accessing-n2het-as-gio 

    https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/939381/ccs-tms570lc4357-interrupts-for-n2het1-2-as-gpio 

  • 您好,如果您只使用 N2HET 引脚作为 GIO ,则不必运行 hetInit(),其中的NHET 汇编代码会被复制到 NHET RAM 并执行。 在 HALCoGen 生成的 NHET 汇编代码中,N2HET2[12] 用于边缘检测。
    以下为使用 N2HET 引脚作为 GIO 的示例,供您参考:

    #include "het.h"

    #include "gio.h"

    main(){

         gioInit();

         gioSetDirection(hetPORT2, 0xFFFFEFFF); //N2HET2[12] as input, others are output

         if ((gioGetBit(hetPORT2, 12) == 1)
         {

                  CPUUPDATE=1;
         }

    }

    以及您用作INPUT的 N2HET2[12] 的 pinmux 配置是正确的。
    Pinmux for N2HET2[12]:pinMuxReg->PINMUX[97] = SIGNAL_N2HET2_12_D3 | SIGNAL_N2HET2_13_D2 | SIGNAL_N2HET2_14_D1 | SIGNAL_N2HET2_15_K4;

    希望以上解答对您有所帮助,谢谢。