本实验分别通过配置定时器和系统SysTick,来点亮LED。开发板Cypress Psoc 4100 plus 系列MCU型号:CY8C4147AZI-S475;
1.新建工程
参考之前工程例程;
2.添加组件
需要添加一个定时器,一个输出引脚,一个时钟源,一个中断接收源;
2.1定时器参数配置
注意Interrupt触发方式以及周计数,需与其他组件参数配合;
2.2 定时器时钟源配置
定时器时钟设置成1Khz,计数设置成500,即500ms产生一次中断溢出;
2.3中断设置
2.4 输出IO口配置
3.绑定MCU引脚
只有一个输出IO口需要绑定
4.Build生成并实现
初始化定时器,并开启中断,重新给中断定义一个入口函数;
int main(void)
{
CyGlobalIntEnable; /* Enable global interrupts. */
/* Place your initialization/startup code here (e.g. MyInst_Start()) */
Timer_1_Start();//定时器开启
Timer_isr_1_Start();//定时器溢出中断开启
Timer_isr_1_StartEx(user_Timer_isr_1_Interrupt);//重新定义中断入口函数
for(;;)
{
/* Place your application code here. */
LED_Pin_Write(led_toggle); //LED点灯闪烁
}
}
中断函数编写
CY_ISR(user_Timer_isr_1_Interrupt)
{
Timer_isr_1_ClearPending();//清除Timer_isr中断列表
Timer_1_ClearInterrupt(Timer_1_INTR_MASK_TC );//按中断标志清除定时器中断
led_toggle^=1;//实现灯亮灭翻转标志
}
5.用系统滴答SysTick实现LED灯闪烁
开启系统SysTick,在回调函数中实现计数,系统默认SysTick为1ms进入一次中断;
int main(void)
{
CyGlobalIntEnable; /* Enable global interrupts. */
/* Place your initialization/startup code here (e.g. MyInst_Start()) */
CySysTickStart();//开启SysTick
CySysTickSetCallback(0, user_tick_function);//配置回调函数
for(;;)
{
/* Place your application code here. */
if((sys_count)>=500)
{
sys_count=0;
led_toggle^=1;
LED_Pin_Write(led_toggle);
}
}
}
回调函数编写
void user_tick_function(void)
{
sys_count++;
}
在回调函数中只对变量进行++;
PS:CY8C4147AZI-S475系统滴答SysTick回调函数柯配置5个,CySysTickSetCallback(0, user_tick_function);的第一个参数取值0-4;