大家好,欢迎来到IT知识分享网。
硬件:S32K144开发板
软件:S32DS 2.2
1,S32K144硬件连接说明
定时器计数模式,中断实现100ms的LED闪烁。
* LED4 PTD0
2,S32DS的FTM配置
同样的方法我们打开基础工程,双击Components(1)打开外设配置工具Components Library 。双击外设配置工具Components Library 下方的ftm_mc选项(2)添加定时器外设。最后双击flexTimer(3)进入定时器配置界面。可以双击空白处最大化窗口方便配置。
定时器配置界面如下,系统时钟为48MHz,我们配置时钟分频为128,所以定时器时钟为48MHz/128=375KHz(1),勾选Timer overflow interrupt(2)选择定时器溢出中断,最后修改final value(3)更改递增计数的counter载入值为37500。
综上可以计算得出,一次中断的时间为37500/375KHz=0.1s=100ms。
3,S32DS的FTM常用函数说明
3.1,FTM_DRV_Init定时器初始化函数。输入值instance为定时器基地址,输入值info为初始化配置结构体,输入值state为定时器状态结构体。
status_t FTM_DRV_Init(uint32_t instance, const ftm_user_config_t * info, ftm_state_t * state)
3.2,INT_SYS_InstallHandler系统中断处理函数。输入值irqNumber为中断号,输入值newHandler为中断处理函数地址。
void INT_SYS_InstallHandler(IRQn_Type irqNumber, const isr_t newHandler, isr_t* const oldHandler)
其中的IRQn_Type irqNumber中断号如下,位于S32K144.h头文件中:
typedef enum { /* Auxiliary constants */ NotAvail_IRQn = -128, /< Not available device specific interrupt */ /* Core interrupts */ NonMaskableInt_IRQn = -14, /< Non Maskable Interrupt */ HardFault_IRQn = -13, /< Cortex-M4 SV Hard Fault Interrupt */ MemoryManagement_IRQn = -12, /< Cortex-M4 Memory Management Interrupt */ BusFault_IRQn = -11, /< Cortex-M4 Bus Fault Interrupt */ UsageFault_IRQn = -10, /< Cortex-M4 Usage Fault Interrupt */ SVCall_IRQn = -5, /< Cortex-M4 SV Call Interrupt */ DebugMonitor_IRQn = -4, /< Cortex-M4 Debug Monitor Interrupt */ PendSV_IRQn = -2, /< Cortex-M4 Pend SV Interrupt */ SysTick_IRQn = -1, /< Cortex-M4 System Tick Interrupt */ /* Device specific interrupts */ DMA0_IRQn = 0u, /< DMA channel 0 transfer complete */ DMA1_IRQn = 1u, /< DMA channel 1 transfer complete */ DMA2_IRQn = 2u, /< DMA channel 2 transfer complete */ DMA3_IRQn = 3u, /< DMA channel 3 transfer complete */ DMA4_IRQn = 4u, /< DMA channel 4 transfer complete */ DMA5_IRQn = 5u, /< DMA channel 5 transfer complete */ DMA6_IRQn = 6u, /< DMA channel 6 transfer complete */ DMA7_IRQn = 7u, /< DMA channel 7 transfer complete */ DMA8_IRQn = 8u, /< DMA channel 8 transfer complete */ DMA9_IRQn = 9u, /< DMA channel 9 transfer complete */ DMA10_IRQn = 10u, /< DMA channel 10 transfer complete */ DMA11_IRQn = 11u, /< DMA channel 11 transfer complete */ DMA12_IRQn = 12u, /< DMA channel 12 transfer complete */ DMA13_IRQn = 13u, /< DMA channel 13 transfer complete */ DMA14_IRQn = 14u, /< DMA channel 14 transfer complete */ DMA15_IRQn = 15u, /< DMA channel 15 transfer complete */ DMA_Error_IRQn = 16u, /< DMA error interrupt channels 0-15 */ MCM_IRQn = 17u, /< FPU sources */ FTFC_IRQn = 18u, /< FTFC Command complete */ Read_Collision_IRQn = 19u, /< FTFC Read collision */ LVD_LVW_IRQn = 20u, /< PMC Low voltage detect interrupt */ FTFC_Fault_IRQn = 21u, /< FTFC Double bit fault detect */ WDOG_EWM_IRQn = 22u, /< Single interrupt vector for WDOG and EWM */ RCM_IRQn = 23u, /< RCM Asynchronous Interrupt */ LPI2C0_Master_IRQn = 24u, /< LPI2C0 Master Interrupt */ LPI2C0_Slave_IRQn = 25u, /< LPI2C0 Slave Interrupt */ LPSPI0_IRQn = 26u, /< LPSPI0 Interrupt */ LPSPI1_IRQn = 27u, /< LPSPI1 Interrupt */ LPSPI2_IRQn = 28u, /< LPSPI2 Interrupt */ LPUART0_RxTx_IRQn = 31u, /< LPUART0 Transmit / Receive Interrupt */ LPUART1_RxTx_IRQn = 33u, /< LPUART1 Transmit / Receive Interrupt */ LPUART2_RxTx_IRQn = 35u, /< LPUART2 Transmit / Receive Interrupt */ ADC0_IRQn = 39u, /< ADC0 interrupt request. */ ADC1_IRQn = 40u, /< ADC1 interrupt request. */ CMP0_IRQn = 41u, /< CMP0 interrupt request */ ERM_single_fault_IRQn = 44u, /< ERM single bit error correction */ ERM_double_fault_IRQn = 45u, /< ERM double bit error non-correctable */ RTC_IRQn = 46u, /< RTC alarm interrupt */ RTC_Seconds_IRQn = 47u, /< RTC seconds interrupt */ LPIT0_Ch0_IRQn = 48u, /< LPIT0 channel 0 overflow interrupt */ LPIT0_Ch1_IRQn = 49u, /< LPIT0 channel 1 overflow interrupt */ LPIT0_Ch2_IRQn = 50u, /< LPIT0 channel 2 overflow interrupt */ LPIT0_Ch3_IRQn = 51u, /< LPIT0 channel 3 overflow interrupt */ PDB0_IRQn = 52u, /< PDB0 interrupt */ SCG_IRQn = 57u, /< SCG bus interrupt request */ LPTMR0_IRQn = 58u, /< LPTIMER interrupt request */ PORTA_IRQn = 59u, /< Port A pin detect interrupt */ PORTB_IRQn = 60u, /< Port B pin detect interrupt */ PORTC_IRQn = 61u, /< Port C pin detect interrupt */ PORTD_IRQn = 62u, /< Port D pin detect interrupt */ PORTE_IRQn = 63u, /< Port E pin detect interrupt */ SWI_IRQn = 64u, /< Software interrupt */ PDB1_IRQn = 68u, /< PDB1 interrupt */ FLEXIO_IRQn = 69u, /< FlexIO Interrupt */ CAN0_ORed_IRQn = 78u, /< CAN0 OR'ed [Bus Off OR Transmit Warning OR Receive Warning] */ CAN0_Error_IRQn = 79u, /< CAN0 Interrupt indicating that errors were detected on the CAN bus */ CAN0_Wake_Up_IRQn = 80u, /< CAN0 Interrupt asserted when Pretended Networking operation is enabled, and a valid message matches the selected filter criteria during Low Power mode */ CAN0_ORed_0_15_MB_IRQn = 81u, /< CAN0 OR'ed Message buffer (0-15) */ CAN0_ORed_16_31_MB_IRQn = 82u, /< CAN0 OR'ed Message buffer (16-31) */ CAN1_ORed_IRQn = 85u, /< CAN1 OR'ed [Bus Off OR Transmit Warning OR Receive Warning] */ CAN1_Error_IRQn = 86u, /< CAN1 Interrupt indicating that errors were detected on the CAN bus */ CAN1_ORed_0_15_MB_IRQn = 88u, /< CAN1 OR'ed Interrupt for Message buffer (0-15) */ CAN2_ORed_IRQn = 92u, /< CAN2 OR'ed [Bus Off OR Transmit Warning OR Receive Warning] */ CAN2_Error_IRQn = 93u, /< CAN2 Interrupt indicating that errors were detected on the CAN bus */ CAN2_ORed_0_15_MB_IRQn = 95u, /< CAN2 OR'ed Message buffer (0-15) */ FTM0_Ch0_Ch1_IRQn = 99u, /< FTM0 Channel 0 and 1 interrupt */ FTM0_Ch2_Ch3_IRQn = 100u, /< FTM0 Channel 2 and 3 interrupt */ FTM0_Ch4_Ch5_IRQn = 101u, /< FTM0 Channel 4 and 5 interrupt */ FTM0_Ch6_Ch7_IRQn = 102u, /< FTM0 Channel 6 and 7 interrupt */ FTM0_Fault_IRQn = 103u, /< FTM0 Fault interrupt */ FTM0_Ovf_Reload_IRQn = 104u, /< FTM0 Counter overflow and Reload interrupt */ FTM1_Ch0_Ch1_IRQn = 105u, /< FTM1 Channel 0 and 1 interrupt */ FTM1_Ch2_Ch3_IRQn = 106u, /< FTM1 Channel 2 and 3 interrupt */ FTM1_Ch4_Ch5_IRQn = 107u, /< FTM1 Channel 4 and 5 interrupt */ FTM1_Ch6_Ch7_IRQn = 108u, /< FTM1 Channel 6 and 7 interrupt */ FTM1_Fault_IRQn = 109u, /< FTM1 Fault interrupt */ FTM1_Ovf_Reload_IRQn = 110u, /< FTM1 Counter overflow and Reload interrupt */ FTM2_Ch0_Ch1_IRQn = 111u, /< FTM2 Channel 0 and 1 interrupt */ FTM2_Ch2_Ch3_IRQn = 112u, /< FTM2 Channel 2 and 3 interrupt */ FTM2_Ch4_Ch5_IRQn = 113u, /< FTM2 Channel 4 and 5 interrupt */ FTM2_Ch6_Ch7_IRQn = 114u, /< FTM2 Channel 6 and 7 interrupt */ FTM2_Fault_IRQn = 115u, /< FTM2 Fault interrupt */ FTM2_Ovf_Reload_IRQn = 116u, /< FTM2 Counter overflow and Reload interrupt */ FTM3_Ch0_Ch1_IRQn = 117u, /< FTM3 Channel 0 and 1 interrupt */ FTM3_Ch2_Ch3_IRQn = 118u, /< FTM3 Channel 2 and 3 interrupt */ FTM3_Ch4_Ch5_IRQn = 119u, /< FTM3 Channel 4 and 5 interrupt */ FTM3_Ch6_Ch7_IRQn = 120u, /< FTM3 Channel 6 and 7 interrupt */ FTM3_Fault_IRQn = 121u, /< FTM3 Fault interrupt */ FTM3_Ovf_Reload_IRQn = 122u /< FTM3 Counter overflow and Reload interrupt */ } IRQn_Type;
3.3,INT_SYS_EnableIRQ使能中断函数。输入值irqNumber为中断号。
void INT_SYS_EnableIRQ(IRQn_Type irqNumber)
3.4,FTM_DRV_InitCounter计数器初始化函数。输入值instance为定时器基地址,输入值timer定时器配置结构体。
status_t FTM_DRV_InitCounter(uint32_t instance, const ftm_timer_param_t * timer)
3.5,FTM_DRV_CounterStart计数器启动函数。输入值instance为定时器基地址。
status_t FTM_DRV_CounterStart(uint32_t instance)
3.6,FTM_DRV_ClearStatusFlags清标志位函数。输入值instance为定时器基地址。
void FTM_DRV_ClearStatusFlags(uint32_t instance, uint32_t flagMask)
4,S32K144的FTM实战
定时器溢出中断处理函数编写
/* 定时器溢出中断处理函数 */ void ftmTimerISR(void) { PINS_DRV_TogglePins(PTD,1<<16); delay_ms(10); FTM_DRV_ClearStatusFlags(INST_FLEXTIMER_MC1, (uint32_t)FTM_TIME_OVER_FLOW_FLAG); }
main主函数编写
FTM_DRV_Init(INST_FLEXTIMER_MC1, &flexTimer_mc1_InitConfig,&ftmStateInit);//初始化TIM定时器 INT_SYS_InstallHandler(FTM0_Ovf_Reload_IRQn, &ftmTimerISR, (isr_t *) 0);//初始化中断:中断号,中断处理函数 INT_SYS_EnableIRQ(FTM0_Ovf_Reload_IRQn);//使能中断 FTM_DRV_InitCounter(INST_FLEXTIMER_MC1, &flexTimer_mc1_TimerConfig);//初始化计数器 FTM_DRV_CounterStart(INST_FLEXTIMER_MC1);//启动计数器 while(1) { }
编译运行,LED灯100ms闪烁实验完成。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/124691.html