Other Parts Discussed in Thread: C2000WARE
主题中讨论的其他器件:C2000WARE
工具/软件:Code Composer Studio
大家好、我正在尝试使用 CLB 模块来保护 PWM 信号。 整个过程如下图所示、与演示"clb_ex4_PWM_protection"类似。
我的意图是:
GPIO2、3被置位以生成 EPWM2信号。 GPIO16被连接至一个按钮。 按下按钮时、I/O 将处于低电平。
因此、GPIO16被用来激励误差信号。
在正常情况下、GPIO2、3可以生成复杂的 PWM 信号。 按下按钮时 、GPIO2、3的输出应该为低电平。
Tile2 用作与门。
我遵循了用户指南的说明和论坛上提供的答案。 但是、我仍然遇到了以下问题:
GPIO2、3可以生成 PWM 信号、但 GPIO14、15无法生成。 CLB 模块似乎不起作用。
代码中包含一些详细说明。
我的代码是:
void main (void) { InitSysCtrl();//系统初始200MHz InitGpio(); InitEPwm1Gpio();// GPIO0、1连接有两个 LED、表示按钮状态 InitEPwm2Gpio();// EPWM2A、B 是生成的 PWM 信号。 //GPIO16被设定为 I/O 并且被连接至一个按钮。 //按下按钮时,低电平表示 PWM 故障 //和 PWM 信号应该被阻断。 GPIO_SetupPinMux (16、0、0); GPIO_SetupPinOptions (16、0、GPIO_PULLUP);// Dint; InitPieCtrl(); IER = 0x0000; IFR = 0x0000; InitPieVectTable(); EALLOW; CpuSysRegs.PCLKCR0.bit.TBCLKSYNC =0; EDIS; InitEPwm2Examples();// 10kHz EALLOW; CpuSysRegs.PCLKCR0.bit.TBCLKSYNC=1; EDIS; IER = 0;//中断被禁用
//---- 上面的代码可以正常工作。 我的问题是 CLB 寄存器的设置。
EALLOW; //将 GPIO16设置为输入 Xbar1 Xbar_setInputPin (XBAR_Input1、16); //将 InputXBar 1设置为 XBAR_AUXSIG0 HWREG (XBAR_CLB_CFG_REG_BASE + XBAR_O_AUXSIG0MUX0TO15CFG)|= 4; //启用 XBAR_AUXSIG0 HWREG (XBAR_CLB_EN_REG_BASE + XBAR_AUXSIG0)|= XBAR_MUX01; EDIS; //选择 CLB2_base CLB_CONFIGLocalInputMux (CLB2_base、CLB_IN0、CLB_LOCAL_IN_MUX_GLOBAL_IN); CLB_CONFIGLocalInputMux (CLB2_base、CLB_IN1、CLB_LOCAL_IN_MUX_GLOBAL_IN); CLB_CONFIGLocalInputMux (CLB2_base、CLB_IN2、CLB_LOCAL_IN_MUX_GLOBAL_IN); CLB_CONFIGLocalInputMux (CLB2_base、CLB_in3、CLB_LOCAL_IN_MUX_GLOBAL_IN); CLB_CONFIGLocalInputMux (CLB2_base、CLB_IN4、CLB_LOCAL_IN_MUX_GLOBAL_IN); CLB_CONFIGLocalInputMux (CLB2_base、CLB_iN5、CLB_LOCAL_IN_MUX_GLOBAL_IN); CLB_CONFIGLocalInputMux (CLB2_base、CLB_IN6、CLB_LOCAL_IN_MUX_GLOBAL_IN); CLB_CONFIGLocalInputMux (CLB2_base、CLB_IN7、CLB_LOCAL_IN_MUX_GLOBAL_IN); // GPIO16-->输入 XBar 1 --> AUXSIG0 -->边界0 // EPWM2A_DB ->边界1 // EPWM2B_DB ->边界2. CLB_CONFIGGlobalInputMux (CLB2_base、CLB_IN0、CLB_GLOBAL_IN_MUX_CLB_AUXSIG0); CLB_CONFIGGlobalInputMux (CLB2_base、CLB_IN1、CLB_GLOBAL_IN_MUX_EPWM2A_DB); CLB_CONFIGGlobalInputMux (CLB2_base、CLB_IN2、CLB_GLOBAL_IN_MUX_EPWM2B_DB); CLB_CONFIGGlobalInputMux (CLB2_base、CLB_in3、CLB_GLOBAL_IN_MUX_EPWM1A); CLB_CONFIGGlobalInputMux (CLB2_base、CLB_IN4、CLB_GLOBAL_IN_MUX_EPWM1A); CLB_CONFIGGlobalInputMux (CLB2_base、CLB_iN5、CLB_GLOBAL_IN_MUX_EPWM1A); CLB_CONFIGGlobalInputMux (CLB2_base、CLB_IN6、CLB_GLOBAL_IN_MUX_EPWM1A); CLB_CONFIGGlobalInputMux (CLB2_base、CLB_IN7、CLB_GLOBAL_IN_MUX_EPWM1A); //为 CLB2、IN0、1、2选择外部 CLB_CONFIGGPInputMux (CLB2_base、CLB_IN0、CLB_GP_IN_MUX_EXTERNAL); CLB_CONFIGGPInputMux (CLB2_base、CLB_IN1、CLB_GP_IN_MUX_EXTERNAL); CLB_CONFIGGPInputMux (CLB2_base、CLB_IN2、CLB_GP_IN_MUX_EXTERNAL); CLB_CONFIGGPInputMux (CLB2_base、CLB_in3、CLB_GP_IN_MUX_GP_REG); CLB_CONFIGGPInputMux (CLB2_base、CLB_IN4、CLB_GP_IN_MUX_GP_REG); CLB_CONFIGGPInputMux (CLB2_base、CLB_iN5、CLB_GP_IN_MUX_GP_REG); CLB_CONFIGGPInputMux (CLB2_base、CLB_IN6、CLB_GP_IN_MUX_GP_REG); CLB_CONFIGGPInputMux (CLB2_base、CLB_IN7、CLB_GP_IN_MUX_GP_REG); EALLOW; //将 GPIO14设置为 outputXbar 3. GpioCtrlRegs.GPAPUD.bit.GPIO14 = 1;//禁用 GPIO14上的上拉 GpioCtrlRegs.GPAMUX1.bit.GPIO14 = 6;//将 GPIO14配置为 outputbar3 GpioCtrlRegs.GPADIR.bit.GPIO14 = 1;//输出 //将 GPIO15设置为 outputXbar 4. GpioCtrlRegs.GPAPUD.bit.GPIO15 = 1;//禁用 GPIO15上的上拉 GpioCtrlRegs.GPAMUX1.bit.GPIO15 = 6;//将 GPIO15配置为 outputbar4 GpioCtrlRegs.GPADIR.bit.GPIO15 = 1;//输出 // OutputXbarRegs.OUTPUTLOCK.ALL = 0;//允许修改以下寄存器 OutputXbarRegs.OUTPUT3MUX0TO15CFG.bit.MUX5 = 2; //将 CLB2_OUT4设置为 outputXbar 3. OutputXbarRegs.OUTPUT3MUXENABLE.bit.MUX5 = 1; //启用输出 Xbar3 OutputXbarRegs.OUTPUT4MUX0TO15CFG.bit.MUX7 = 2; //将 CLB2_OUT5设置为 outputXbar 4. OutputXbarRegs.OUTPUT4MUXENABLE.bit.MUX7 = 1; //启用输出 Xbar4 CLB_setOutputMask (CLB2_base、1 << 6 | 1 << 7、true);//let CLB_OUT6、7替代 DB_PWM2A、B。 EDIS; //初始化 CLB2和使能 initTILE2 (clb2_base); clb_enableCLB (CLB2_base); //EINT;// //ERTM;//禁用中断
//以下 GPIO16可以正常工作 for (;;) { //检测是否按下按钮 if (GpioDataRegs.GPADD.bit.GPIO16 ==0) { GpioDataRegs.GPASET.bit.GPIO0 = 1;// LED 打开 DELAY_US (100); } 其他 { GpioDataRegs.GPACLEAR.bit.GPIO0 = 1;// LED 关闭 DELAY_US (100); } }
逻辑块配置显示为:
在 EPWM2 I/O 上 、PWM 信号正常。 但是、在输出 XBar I/O 上、 不存在信号。
按下按钮后、LED 可以正常工作、但 EPWM2信号不变。
我的代码的错误在哪里?

