PROB:IPU2 Core0中的定时器9-11:TCRR 寄存器未加载 TLDR 寄存器值,方法是向 TTGR 寄存器写入除零以外的值或向 TCCR 寄存器分配直接值
对于相同的配置、计时器3-4已正确更新、但计时器9-11无法正常工作
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void App_StartTimer9 (uint32 TimeinM)
{
/*匹配挂起中断清除*/
OS_TIMER9_PER1_IRQSTATUS.MAT_IT_FLAG = 1;
/*溢出挂起中断清除*/
OS_TIMER9_PER1_IRQSTATUS.OVF IT_FLAG = 1;
/*捕捉挂起中断清除*/
OS_TIMER9_PER1_IRQSTATUS.TCAR_IT_FLAG = 1;
OS_TIMER9_IRQENABLE_CLR.OVF EN_FLAG = 1;
/*溢出后自动重新加载*/
OS_TIMER9_PER1_L4_TCLR.AR = 1;
/*预分频器启用*/
OS_TIMER9_PER1_L4_TCLR.PRE = 1;
/*预分频器将频率20MHz 除以4 */
OS_TIMER9_PER1_L4_TCLR.PTV = 1;
20MHz 时的//加载值,延迟为1ms */
OS_TIMER9_PER1_L4_TLDR =计时器;
/*触发从 TLDR 重新加载 TCRR */
OS_TIMER9_PER1_L4_TTGR = 1;
/*启动计时器*/
OS_TIMER9_PER1_L4_TCLR.ST = 1;
/*该位设置1以启用溢出中断*/
OS_TIMER9_IRQENABLE_Set.OVF EN_FLAG = 1;
}
//.................................................................................................. //
void App_StartTimer4 (uint32 TimeinM)
{
/*匹配挂起中断清除*/
OS_TIMER4_PER1_IRQSTATUS.MAT_IT_FLAG = 1;
/*溢出挂起中断清除*/
OS_TIMER4_PER1_IRQSTATUS.OVF IT_FLAG = 1;
/*捕捉挂起中断清除*/
OS_TIMER4_PER1_IRQSTATUS.TCAR_IT_FLAG = 1;
/*溢出后自动重新加载*/
OS_TIMER4_PER1_L4_TCLR.AR = 1;
/*预分频器启用*/
OS_TIMER4_PER1_L4_TCLR.PRE = 1;
/*预分频器将频率20MHz 除以4 */
OS_TIMER4_PER1_L4_TCLR.PTV = 1;
20MHz 时的//加载值,延迟为1ms */
OS_TIMER4_PER1_L4_TLDR =计时器;
/*触发从 TLDR 重新加载 TCRR */
OS_TIMER4_PER1_L4_TTGR = 1;
/*启动计时器*/
OS_TIMER4_PER1_L4_TCLR.ST = 1;
/*该位设置1以启用溢出中断*/
OS_TIMER4_IRQENABLE_Set.OVF EN_FLAG = 1;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/* NVIC 中断清除启用寄存器*/
typedef 结构 stag_os_timer_IRQSTATUS_control
{
uint32 mat_IT_FLAG:1;//匹配时中断*/
uint32 OVF 它的标志:1;//溢出时中断*/
uint32 TCAR_IT_FLAG:1;//捕捉时中断*/
uint32:29;/*保留*/
} OS_IRQSTATUS;
#define OS_TIMER3_PER1_IRQSTATUS (*(volatile OS_IRQSTATUS*) 0x48034028UL)
#define OS_TIMER4_PER1_IRQSTATUS (*(volatile OS_IRQSTATUS*) 0x48036028UL)
#define OS_TIMER9_PER1_IRQSTATUS (*(volatile OS_IRQSTATUS*) 0x4803E028UL)
#define OS_TIMER11_PER1_IRQSTATUS (*(volatile OS_IRQSTATUS*) 0x48088028UL)
/*写入1以设置(启用中断)*/
typedef 结构体 stag_os_timer_IRQENABLE_Set_control
{
uint32 MAT_EN_FLAG:1;//匹配时中断*/
uint32 OVF EN_FLAG:1;//溢出时中断*/
uint32 TCAR_EN_FLAG:1;//捕捉时中断*/
uint32:29;/*保留*/
} OS_IRQENABLE;
#define OS_TIMER3_IRQENABLE_SET (*(volatile OS_IRQENABLE*) 0x4803402CUL)
#define OS_TIMER4_IRQENABLE_SET (*(volatile OS_IRQENABLE*) 0x4803602CUL)
#define OS_TIMER9_IRQENABLE_SET (*(volatile OS_IRQENABLE*) 0x4803E02CUL)
#define OS_TIMER11_IRQENABLE_SET (*(volatile OS_IRQENABLE*) 0x4808802CUL)
/*写入1以清除(清除中断)*/
#define OS_TIMER3_IRQENABLE_CLR (*(volatile OS_IRQENABLE*) 0x48034030UL)
#define OS_TIMER4_IRQENABLE_CLR (*(volatile OS_IRQENABLE*) 0x48036030UL)
#define OS_TIMER9_IRQENABLE_CLR (*(volatile OS_IRQENABLE*) 0x4803E030UL)
#define OS_TIMER11_IRQENABLE_CLR (*(volatile OS_IRQENABLE*) 0x48088030UL)
/*当前定时器寄存器 TCLR 值和运行模式以及停止定时器*/
typedef 结构体 stag_os_timer_TCLR_control
{
uint32 ST:1;/*停止计时器*/
uint32 AR:1;
uint32 PTV:3;
uint32 pre:1;
uint32 CE:1;
uint32 SCPWM:1;
uint32 TCM:2;
uint32 TRG:2;
uint32 PT:1;
uint32 capt_mode:1;
uint32 GPO_CFG:1;
uint32:17;/*保留*/
} OS_TIMER_TCLR;
#define OS_TIMER3_PER1_L4_TCLR (*(volatile OS_TIMER_TCLR*) 0x48034038UL)
#define OS_TIMER4_PER1_L4_TCLR (*(volatile OS_TIMER_TCLR*) 0x48036038UL)
#define OS_TIMER9_PER1_L4_TCLR (*(volatile OS_TIMER_TCLR*) 0x4803E038UL)
#define OS_TIMER11_PER1_L4_TCLR (*(volatile OS_TIMER_TCLR*) 0x48088038UL)
/*当前定时器寄存器 TCRR 值*/
#define OS_TIMER3_PER1_L4_TCRR (*(volatile UINT32*) 0x4803403CUL)
#define OS_TIMER4_PER1_L4_TCRR (*(volatile UINT32*) 0x4803603CUL)
#define OS_TIMER9_PER1_L4_TCRR (*(volatile UINT32*) 0x4803E03CUL)
#define OS_TIMER11_PER1_L4_TCRR (*(volatile UINT32*) 0x4808803CUL)
/*当前定时器寄存器 TLDR 值*/
#define OS_TIMER3_PER1_L4_TLDR (*(volatile UINT32*) 0x48034040UL)
#define OS_TIMER4_PER1_L4_TLDR (*(volatile UINT32*) 0x48036040UL)
#define OS_TIMER9_PER1_L4_TLDR (*(volatile UINT32*) 0x4803E040UL)
#define OS_TIMER11_PER1_L4_TLDR (*(volatile UINT32*) 0x48088040UL)
/*当前计时器寄存器 TTGR 值*/
#define OS_TIMER3_PER1_L4_TTGR (*(volatile UINT32*) 0x48034044UL)
#define OS_TIMER4_PER1_L4_TTGR (*(volatile UINT32*) 0x48036044UL)
#define OS_TIMER9_PER1_L4_TTGR (*(volatile UINT32*) 0x4803E044UL)
#define OS_TIMER11_PER1_L4_TTGR (*(volatile UINT32*) 0x48088044UL)