S32的进阶之路->6,S32DS的FTM配置

S32的进阶之路->6,S32DS的FTM配置硬件 S32K144 开发板软件 S32DS2 2

大家好,欢迎来到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)进入定时器配置界面。可以双击空白处最大化窗口方便配置。

244d8ec149244232acdc3d5fc5ec2384.png

        定时器配置界面如下,系统时钟为48MHz,我们配置时钟分频为128,所以定时器时钟为48MHz/128=375KHz(1),勾选Timer overflow interrupt(2)选择定时器溢出中断,最后修改final value(3)更改递增计数的counter载入值为37500。

        综上可以计算得出,一次中断的时间为37500/375KHz=0.1s=100ms。

f8ceecb3492d459b9369d569248fb2f7.png

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

(0)
上一篇 2025-10-04 16:15
下一篇 2025-10-04 16:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信