|
我发现ti的2802x在controlsuite里边提供了两种外设编程方式,第一种是基于外设驱动库函数,第二种是直接的通过结构体和位域访问寄存器。
外设驱动库:
// Setup TBCLK
PWM_setCounterMode(myPwm1, PWM_CounterMode_UpDown); // Count up and down
PWM_disableCounterLoad(myPwm1); // Disable phase loading
PWM_setHighSpeedClkDiv(myPwm1, PWM_HspClkDiv_by_1); // Clock ratio to SYSCLKOUT
PWM_setClkDiv(myPwm1, PWM_ClkDiv_by_1);
PWM_setShadowMode_CmpA(myPwm1, PWM_ShadowMode_Shadow); // Load registers every ZERO
PWM_setLoadMode_CmpA(myPwm1, PWM_LoadMode_Zero);
直接寄存器访问:
EPwm1Regs.TBPRD = 60000; // PWM1 Fry = 1000HZ
EPwm1Regs.TBPHS.half.TBPHS = 0x0000; //Phase is 0
EPwm1Regs.TBCTR = 30000; // initial duty = 50%
// Setup TBCLK
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;
EPwm1Regs.TBCTL.bit.PHSEN = TB_ENABLE;
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;
我最早是采用第一种编程方式,非常方便。近期发现c2000的其他芯片都没有提供外设驱动库,考虑到以后很可能在系统升级的时候用到c2000的其他芯片,所以改用第二种方式以尽快适应。
不知道你是用哪一种方式?这两种方式的优缺点是什么?
|
|