由于一些原因,现在只能用最基本的driverlib/timer.h来配置一个PWM用来控制LED的闪烁
现在发现timer的寄存器一写就挂,不知道什么原因,还有什么地方需要初始化吗?
void led_blink(uint32_t led_gpio)
{
uint32_t ValuePWMDivFactor ;
uint32_t ValueLoadSetLower ;
uint32_t ValueLoadSetHigher ;
uint32_t ValueLoadMatchLower ;
uint32_t ValueLoadMatchHigher ;
uint32_t ValueTemp ;
//PRCMGPTimerClockDivisionSet(PRCM_CLOCK_DIV_16);
IOCPortConfigureSet(led_gpio,IOC_PORT_MCU_PORT_EVENT0,IOC_IOMODE_NORMAL | IOC_IOPULL_UP|IOC_STRENGTH_MAX | IOC_INT_DISABLE);
GPIO_setOutputEnableDio(led_gpio,GPIO_OUTPUT_ENABLE);
GPIO_writeDio(led_gpio,0);
TimerDisable(GPT0_BASE, TIMER_A); //到这里就挂了
TimerConfigure(GPT0_BASE, TIMER_CFG_SPLIT_PAIR|TIMER_CFG_A_PWM);
TimerLevelControl(GPT0_BASE, TIMER_A, 0);
TimerPrescaleSet(GPT0_BASE, TIMER_A, 1) ;
TimerPrescaleMatchSet(GPT0_BASE, TIMER_A, 1);
ValuePWMDivFactor = 2;
ValueTemp = ValuePWMDivFactor – 1 ;
ValueLoadSetLower = ValueTemp & 0xFFFF ;
ValueLoadSetHigher = ValueTemp & 0xFFFF0000 ;
ValueLoadSetHigher = ValueLoadSetHigher >> 16 ;
ValueTemp = ((ValuePWMDivFactor)/2) – 1 ;
ValueLoadMatchLower = ValueTemp & 0xFFFF ;
ValueLoadMatchHigher = ValueTemp & 0xFFFF0000 ;
ValueLoadMatchHigher = ValueLoadMatchHigher >> 16 ;
TimerPrescaleSet(GPT0_BASE, TIMER_A, ValueLoadSetHigher);
TimerPrescaleMatchSet(GPT0_BASE, TIMER_A, ValueLoadMatchHigher) ;
TimerLoadSet(GPT0_BASE, TIMER_A, ValueLoadSetLower);
TimerMatchSet(GPT0_BASE, TIMER_A,ValueLoadMatchLower);
TimerEnable(GPT0_BASE, TIMER_A);
}
VV:
建议参考TI RTOS封装好的GPTimer 驱动进行开发,相当于在driverlib上面的GP Timer基础上封装了一层。
相关的代码可以参考SDK下面的代码
C:\ti\simplelink_cc13x0_sdk_1_60_00_21\source\ti\drivers\timer
dennis yang:
回复 VV:
谢谢回复,不过我们现在没有用到RTOS,调用C:\ti\simplelink_cc13x0_sdk_1_60_00_21\source\ti\drivers\timer中的驱动报错,而且都是SDK里面的代码错误
Loops:
回复 dennis yang:
你好。大概率是你的调用顺序有问题。你可以参考下SDK文件夹里面的例程,对CC1310 也适用。
C:\ti\simplelink_cc2640r2_sdk_1_50_00_58\source\ti\drivers\pwm
TI中文支持网
