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.

[参考译文] UCD3138A:FIQ 引脚未启用、PWM 引脚始终为低电平

Guru**** 2553260 points


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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/956447/ucd3138a-fiq-pin-is-not-enabling-and-pwm-pin-is-always-low

器件型号:UCD3138A

大家好、

我有一个来自客户的问题。 请参阅下面的内容。

  1. 快速中断请求(FIQ)。 FAULT2 (引脚25)被映射到 FIQ、但它根本不会触发 FIQ ISR。 如果我将 Fault2映射到标准中断请求、则可以触发 ISR、并且一切都正确。 代码如下所示:

#define CIMINT_All_FAULT_PIN    (0x40000000)// 30 故障引脚中断

               …μ A

               GioRegs.FAULTINTENA.bit.FLT2_INT_EN = 1;

               GioRegs.FAULTOUT.bit.FLT2_OUT=1;

               GioRegs.FAULTDIR.bit.FLT2_DIR = 0;

               GioRegs.FAULTIN.bit.FLT2_IN = 0;                                           //1 -故障引脚必须驱动为高电平。 0 -驱动为低电平以触发中断

               GioRegs.FAULTINTPOL.bit.FLT2_INT_POL = 0; //将在1 =上升沿、0 =下降沿上生成中断

              //write_reqmask (CIMINT_All_FAULT_PIN);

              Write_firqpr (CIMINT_All_FAULT_PIN);

               enable_interrupt ();

              enable_fast_interrupt ();

 

如果我注释掉 write_firqpr 并返回 write_reqmask 指令、一切都将正常工作。 它似乎未启用 FIQ。 这是函数 enable_fast_interrupt ();

void enable_fast_interrupt (void)

      Swi_single_entry (0、0、0、4);//代码为4;

 

  1. 除了 DPWM0和 DPWM1、我还尝试从引脚8输出 PWM、但无法从该引脚获取 PWM 信号。 引脚始终为低电平。 以下是我的初始化代码:

 

    1. TimerRegs.T16PWM0CMP0DAT.bit.CMP_DAT = 15870;//重置计数器的值
    2.       TimerRegs.T16PWM0CMP1DAT.bit.CMP_DAT = 7935;//50%50比较器0的占空比一半
    3.    TimerRegs.T16PWM0CMPCTRL.bit.CMP0_INT_ENA = 1;     //启用比较0 (复位)中断
    4.       TimerRegs.T16PWM0CMPCTRL.bit.PWM_OUT_ACTION0 = 1;//1用于清零引脚
    5.       TimerRegs.T16PWM0CMPCTRL.bit.PWM_OUT_Action1 = 2;//2用于清零引脚
    6.       TimerRegs.T16PWM0CNTCTRL.bit.CMP_RESET_ENA=1;//启用由 COMP 0复位
    7.       TimerRegs.T16PWM0CMPCTRL.bit.PWM_OUT = 1;//确保默认值为0
    8.       TimerRegs.T16PWM0CMPCTRL.bit.PWM_OUT_DRV = 1;//将零输入输出锁存器
    9.       TimerRegs.T16PWM0CMPCTRL.bit.PWM_OUT_ENA = 1;//使能引脚作为输出
    10.       TimerRegs.T16PWM0CNTCTRL.bit.SW_RESET = 1;//允许计数器运行

 

    1.       杂项 AnalogRegs.IOMUX.bit.EXT_TRIG_MUX_SEL=3;
    2.       杂项 AnalogRegs.IOMUX.bit.JTAG_CLK_MUX_SEL=0;
    3.       杂项 AnalogRegs.IOMUX.bit.SYNC_MUX_SEL=2;

我将 k 行更改为 m 行为不同的值、但它不起作用。

 

谢谢!
劳伦

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

    您仍然需要设置 reqmask 中的位。  无论中断是标准中断还是快速中断、都需要在该处启用所有中断。  要使它们快速运行、请在要求和第一个请求中启用

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

    尊敬的 Ian:

    感谢你的帮助。 这似乎解决了第一个问题、第二个问题又如何?
    谢谢!
    劳伦

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

    很抱歉我错过了那个。  下面是一个将 PWM 设置为执行输出的代码。:

    空 init_fan (空)

    MiscanalogRegs.IOMUX.bit.EXT_TRIG_MUX_SEL = 3;//在 ADC 外部 TRIG 引脚上输出 pwm0

    TimerRegs.T16PWM0CMP0DAT.bit.CMP_DAT = 625;//重置计数器的值
    TimerRegs.T16PWM0CMP1DAT.bit.CMP_DAT = 0;//不启动风扇
    TimerRegs.T16PWM0CMPCTRL.bit.PWM_OUT_ACTION0 = 1;//1用于清零引脚
    TimerRegs.T16PWM0CMPCTRL.bit.PWM_OUT_Action1 = 2;//2用于清零引脚
    TimerRegs.T16PWM0CNTCTRL.bit.CMP_RESET_ENA=1;//启用由 COMP 0复位
    TimerRegs.T16PWM0CMPCTRL.bit.PWM_OUT = 0;//确保默认值为0
    TimerRegs.T16PWM0CMPCTRL.bit.PWM_OUT_DRV = 1;//将零输入输出锁存器
    TimerRegs.T16PWM0CMPCTRL.bit.PWM_OUT_ENA = 1;//使能引脚作为输出
    TimerRegs.T16PWM0CNTCTRL.bit.SW_RESET = 1;//允许计数器运行

    请注意、它将0放入 TimerRegs.T16PWM0CMP1DAT.bit.CMP_DAT。  这意味着 PWM 的导通时间为0。

    稍后在代码中计算所需的导通时间并将其放入该位字段中:

    TimerRegs.T16PWM0CMP1DAT.bit.CMP_DAT = t;  

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

    你好,Ian,解决了这个问题! 感谢您的及时关注和大力支持。

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

    好的、我将关闭它。