123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- #include "ddl.h"
- #include "lpm.h"
- #include "lptim.h"
- #include "bt.h"
- #include "gpio.h"
- #include "timer3.h"
- #include "multi_button.h"
- //volatile uint32_t uart_rx_ticks = 0;
- ///<Timer1配置初始化
- void board_Timer1Cfg(uint16_t u16Period) //peroid = 2ms
- {
- uint16_t u16ArrValue;
- uint16_t u16CntValue;
- stc_bt_mode0_cfg_t stcBtBaseCfg;
-
- DDL_ZERO_STRUCT(stcBtBaseCfg);
-
- Sysctrl_SetPeripheralGate(SysctrlPeripheralBaseTim, TRUE); //Base Timer外设时钟使能
-
- stcBtBaseCfg.enWorkMode = BtWorkMode0; //定时器模式
- stcBtBaseCfg.enCT = BtTimer; //定时器功能,计数时钟为内部PCLK
- stcBtBaseCfg.enPRS = BtPCLKDiv2; //PCLK/2
- stcBtBaseCfg.enCntMode = Bt16bitArrMode; //自动重载16位计数器/定时器
- stcBtBaseCfg.bEnTog = FALSE;
- stcBtBaseCfg.bEnGate = FALSE;
- stcBtBaseCfg.enGateP = BtGatePositive;
- Bt_Mode0_Init(TIM1, &stcBtBaseCfg); //TIM1 的模式0功能初始化
-
- u16ArrValue = 0x10000 - u16Period;
- Bt_M0_ARRSet(TIM1, u16ArrValue); //设置重载值(ARR = 0x10000 - 周期)
-
- u16CntValue = 0x10000 - u16Period;
- Bt_M0_Cnt16Set(TIM1, u16CntValue); //设置计数初值
-
- Bt_ClearIntFlag(TIM1,BtUevIrq); //清中断标志
- Bt_Mode0_EnableIrq(TIM1); //使能TIM1中断(模式0时只有一个中断)
- EnableNvic(TIM1_IRQn, IrqLevel1, TRUE); //TIM1中断使能
-
- Bt_M0_Run(TIM1); //TIM1 运行。
- }
- //Timer3 Port端口配置
- void board_Timer3PortCfg(void)
- {
- stc_gpio_cfg_t stcTIM3Port;
-
- //结构体初始化清零
- DDL_ZERO_STRUCT(stcTIM3Port);
-
- Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE); //端口外设时钟使能
-
- stcTIM3Port.enDir = GpioDirIn;
-
- Gpio_Init(GpioPortA, GpioPin8, &stcTIM3Port);
- Gpio_SetAfMode(GpioPortA,GpioPin8,GpioAf2); //PA08设置为TIM3_CH0A
-
- #if 0
- Gpio_Init(GpioPortA, GpioPin7, &stcTIM3Port);
- Gpio_SetAfMode(GpioPortA,GpioPin7,GpioAf4); //PA07设置为TIM3_CH0B
- Gpio_Init(GpioPortB, GpioPin10, &stcTIM3Port);
- Gpio_SetAfMode(GpioPortB,GpioPin10,GpioAf5); //PB10设置为TIM3_CH1A
-
- Gpio_Init(GpioPortB, GpioPin0, &stcTIM3Port);
- Gpio_SetAfMode(GpioPortB,GpioPin0,GpioAf2); //PB00设置为TIM3_CH1B
-
- Gpio_Init(GpioPortB, GpioPin8, &stcTIM3Port);
- Gpio_SetAfMode(GpioPortB,GpioPin8,GpioAf6); //PB08设置为TIM3_CH2A
-
- Gpio_Init(GpioPortB, GpioPin15, &stcTIM3Port);
- Gpio_SetAfMode(GpioPortB,GpioPin15,GpioAf2); //PB15设置为TIM3_CH2B
- #endif
- }
- //Timer3 配置
- void board_Timer3Cfg(void)
- {
- uint16_t u16ArrValue;
- uint16_t u16CntValue;
- stc_tim3_mode23_cfg_t stcTim3BaseCfg;
- stc_tim3_m23_input_cfg_t stcTim3PortCapCfg;
-
- //结构体初始化清零
- DDL_ZERO_STRUCT(stcTim3BaseCfg);
- DDL_ZERO_STRUCT(stcTim3PortCapCfg);
-
- Sysctrl_SetPeripheralGate(SysctrlPeripheralTim3, TRUE); //Timer3外设时钟使能
-
- stcTim3BaseCfg.enWorkMode = Tim3WorkMode2; //锯齿波模式
- stcTim3BaseCfg.enCT = Tim3Timer; //定时器功能,计数时钟为内部PCLK
- stcTim3BaseCfg.enPRS = Tim3PCLKDiv4; //PCLK/4 6MHZ
- stcTim3BaseCfg.enCntDir = Tim3CntUp; //向上计数,在三角波模式时只读
-
- Tim3_Mode23_Init(&stcTim3BaseCfg); //TIM3 的模式23功能初始化
-
- stcTim3PortCapCfg.enCHxACmpCap = Tim3CHxCapMode; //CHB通道设置为捕获模式
- stcTim3PortCapCfg.enCHxACapSel = Tim3CHxCapRise; //CHB通道上升沿下降沿捕获都使能
- stcTim3PortCapCfg.enCHxAInFlt = Tim3FltPCLKDiv16Cnt3; //PCLK/16 3个连续有效
- stcTim3PortCapCfg.enCHxAPolarity = Tim3PortPositive; //正常输入输出
-
- Tim3_M23_PortInput_Cfg(Tim3CH0, &stcTim3PortCapCfg); //端口输入初始化配置
- //Tim3_M23_PortInput_Cfg(Tim3CH1, &stcTim3PortCapCfg); //端口输入初始化配置
- //Tim3_M23_PortInput_Cfg(Tim3CH2, &stcTim3PortCapCfg); //端口输入初始化配置
-
- u16ArrValue = 0xFFFF;
- Tim3_M23_ARRSet(u16ArrValue, TRUE); //设置重载值,并使能缓存
-
- u16CntValue = 0;
- Tim3_M23_Cnt16Set(u16CntValue); //设置计数初值
-
- Tim3_ClearAllIntFlag(); //清中断标志
- Tim3_Mode23_EnableIrq(Tim3CA0Irq); //使能TIM3 CB0比较/捕获中断
- Tim3_Mode23_EnableIrq(Tim3UevIrq); //使能TIM3 Uev更新中断
- EnableNvic(TIM3_IRQn, IrqLevel1, TRUE); //TIM3中断使能
-
- Tim3_M23_Run(); //运行
- }
- ///<Lptmer配置初始化
- void board_LPTimerInit(void)
- {
- stc_lptim_cfg_t stcLptCfg;
- DDL_ZERO_STRUCT(stcLptCfg);
- ///< 使能LPTIM0 外设时钟
- Sysctrl_SetPeripheralGate(SysctrlPeripheralLpTim, TRUE);
- Lptim_Cmd(M0P_LPTIMER, FALSE); ///< 停止lptimer0
- stcLptCfg.enGate = LptimGateLow;
- stcLptCfg.enGatep = LptimGatePLow;
- stcLptCfg.enTcksel = LptimRcl;
- stcLptCfg.enTogen = LptimTogEnLow;
- stcLptCfg.enCt = LptimTimerFun; //计数器功能
- stcLptCfg.enMd = LptimMode2; //工作模式为模式2:自动重装载16位计数器/定时器
- stcLptCfg.u16Arr = 30000; //预装载寄存器值,计数初值
- Lptim_Init(M0P_LPTIMER, &stcLptCfg);
- Lptim_ClrItStatus(M0P_LPTIMER); //清除中断标志位
- Lptim_ConfIt(M0P_LPTIMER, TRUE); //允许LPTIMER中断
- EnableNvic(LPTIM_IRQn, IrqLevel3, TRUE);
-
- Lptim_Cmd(M0P_LPTIMER, TRUE); ///< 启动lptimer1运行
- }
- /*******************************************************************************
- * TIM1中断服务函数
- ******************************************************************************/
- void Tim1_IRQHandler(void)
- {
- //Timer1 模式0 溢出中断
- if(TRUE == Bt_GetIntFlag(TIM1, BtUevIrq))
- {
- Bt_ClearIntFlag(TIM1,BtUevIrq); //中断标志清零
-
- button_ticks();
- }
- }
- /**
- ******************************************************************************
- ** \brief LPTIMER中断服务函数
- **
- ** \return 无
- ******************************************************************************/
- void LpTim_IRQHandler(void)
- {
- // static boolean_t bFlag = TRUE;
-
- if (TRUE == Lptim_GetItStatus(M0P_LPTIMER))
- {
-
- Lptim_ClrItStatus(M0P_LPTIMER);//清除LPTimer的中断标志位
- }
- }
|