- SYS_UnlockReg(); //解锁受保护的寄存器
-
- Sys_Init(); //初始化系统,外设时钟和多功能I / O
-
- Uart0_Init(UART0_BOUND);//为printf初始化UART0
-
- Led_Init(); //LED工作指示灯初始化
-
- Pwm_Init(); //PWM0、PWM2初始化
- Timer_Init(); //定时器0初始化 1ms
- SYS_LockReg(); //锁定受保护的寄存器[code]//--------------------------------------------------
- //初始化系统时钟
- //--------------------------------------------------
- void Sys_Init(void)
- {
- //--------------------------------------------------
- //启用内部RC 22.1184MHz时钟
- CLK_EnableXtalRC(CLK_PWRCON_OSC22M_EN_Msk);
- //等待内部RC时钟就绪
- CLK_WaitClockReady(CLK_CLKSTATUS_OSC22M_STB_Msk);
- //--------------------------------------------------
- //将HCLK时钟源切换为内部RC和HCLK源分频1
- CLK_SetHCLK(CLK_CLKSEL0_HCLK_S_HIRC, CLK_CLKDIV_HCLK(1));
- //--------------------------------------------------
- //将PLL的核心时钟设置为PLL_CLOCK
- CLK_SetCoreClock(PLL_CLOCK);
- //更新系统核心时钟
- //用户可以使用SystemCoreClockUpdate()
- //自动计算PllClock,SystemCoreClock和CycylesPerUs。
- SystemCoreClockUpdate();
- }
- [code]//--------------------------------------------------
- //PWM0初始化
- //--------------------------------------------------
- void Pwm_Init(void)
- {
- //PWM0初始化 将PWM0初始化成输出口,时钟频率为10kHZ
- //初始化I / O多功能
- //设置PWMA通道0、2的多功能引脚 P40 P42
- SYS->P4_MFP &= ~ (SYS_MFP_P40_Msk | SYS_MFP_P42_Msk);
- SYS->P4_MFP |= SYS_MFP_P40_PWM0 | SYS_MFP_P42_PWM2;
- //启动PWM0时钟
- CLK_EnableModuleClock(PWM01_MODULE);
- //IP时钟源
- CLK_SetModuleClock(PWM01_MODULE, CLK_CLKSEL1_PWM01_S_HCLK, 0);
-
- //PWM2初始化,初始化成PWM输入捕获
- //启动PWM0时钟
- CLK_EnableModuleClock(PWM23_MODULE);
- //IP时钟源
- CLK_SetModuleClock(PWM23_MODULE, CLK_CLKSEL1_PWM23_S_HCLK, 0);
-
- //重置PWMA通道0~通道3
- SYS_ResetModule(PWM03_RST);
-
- /* 设置PWMB通道2捕获配置 */
- PWM_ConfigCaptureChannel(PWMA, PWM_CH2, 5000, 0);
- /* 使能PWMB通道2的捕获下降沿中断*/
- PWM_EnableCaptureInt(PWMA, PWM_CH2, PWM_CAPTURE_INT_FALLING_LATCH);
- /* 使能PWMA NVIC中断*/
- NVIC_EnableIRQ((IRQn_Type)(PWMA_IRQn));
- /* 使能PWMB通道2的定时器 */
- PWM_Start(PWMA, 0x4);
- /* 使能PWMB通道2的捕获功能 */
- PWM_EnableCapture(PWMA, 0x4);
- /* 等到PWMB通道2计时器开始计数 */
- while(PWMA->PDR2 == 0);
- PWM_ClearCaptureIntFlag(PWMA, PWM_CH2, PWM_CAPTURE_INT_FALLING_LATCH);
-
- }[code]
- void PWMA_IRQHandler(void)
- {
- // uint32_t u32PwmIntFlag;
- uint32_t u32CapIntFlag1;
- /* 处理PWMB捕获功能 */
- u32CapIntFlag1 = PWMA->CCR2;
- /* PWMB通道2捕获中断*/
- if(u32CapIntFlag1 & PWM_CCR2_CAPIF2_Msk)
- {
- v_Cont ++;
- g_Capif2Flag = SET;
- PWM_ClearCaptureIntFlag(PWMA, PWM_CH2, PWM_CAPTURE_INT_FALLING_LATCH );
- // PWMA->CCR2 &= (PWM_CCR_MASK | PWM_CCR2_CAPIF2_Msk);
- }
- }
- [code] /* 捕获输入波形数据 */
- if(g_Capif2Flag == SET)
- {
- u32i = 0;
- g_Capif2Flag = CLEAR;
-
-
- u32Count[u32i++] = PWM_GET_CAPTURE_FALLING_DATA(PWMA, PWM_CH2);
- u32Count[u32i++] = PWM_GET_CAPTURE_RISING_DATA(PWMA, PWM_CH2);
-
- // printf("\n捕获结果:\n 高电平时间=%d,低电平时间=%d\n 高周期=%d,低周期=%d,总周期=%d.\n",
- // u16RisingTime, u16FallingTime, u16HighPeroid, u16LowPeroid, u16TotalPeroid);
- //
- //
- printf("\n捕获结果:\n u32Count[0] =%d, u32Count[1] =%d,\n u32Count[2] =%d, u32Count[3] =%d.\n",
- u32Count[0],u32Count[1],u32Count[2],u32Count[3]);
- printf("\n Count = %d.\n",v_Cont);
- v_Cont = 0;
- }
[/code][/code][/code][/code]
|