R8025AC固定周期中断功能:
通过设定寄存器0E实现中断输出,STM32中断接收,问题是我设置脉冲模式时可以,为啥改到电平模式就不行了呢(一直为低)?有没有用过的说说
R8025AC设置部分:
buf[0] = 0x24;//0010 0100,bit5:1 24小时制,bit2:0 INTA输出1HZ电平,即秒脉冲,下降与秒计时同步
R8025AC_Write(0x0E, buf, 1);//设置24小时制
中断部分:
[mw_shl_code=c,true]//外部中断0服务程序
void EXTIX_Init(void)
{
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
//初始化KEY0-->GPIOA.13,KEY1-->GPIOA.15 上拉输入
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);//使能PORTA,PORTE时钟
//初始化PE3
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//输入输出设置,输入/输出/复用/模拟
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//输入模式,上拉
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//PE3
GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化GPIOE3
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//使能SYSCFG时钟
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource3);//PE3 连接到中断线3
/* 配置EXTI_Line3*/
EXTI_InitStructure.EXTI_Line = EXTI_Line3;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断事件
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//下降沿触发
EXTI_InitStructure.EXTI_LineCmd = ENABLE;//中断线使能
EXTI_Init(&EXTI_InitStructure);//配置
NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;//外部中断3
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;//抢占优先级2
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;//子优先级2
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中断通道
NVIC_Init(&NVIC_InitStructure);//配置
}
//外部中断3服务程序
void EXTI3_IRQHandler(void)
{
EXTI_ClearITPendingBit(EXTI_Line3); //清除LINE3上的中断标志位
run_time++;//计时
data_deal_flag = 1;//数据处理的标志
time_flag = 1;//时间处理标志
}
[/mw_shl_code]
其实答案就在这个时序图上,图上的意思是说当每次收到中断时你要手动把CTFG清0才能收到下一个脉冲!有些无语。。。怎么跟串口中断是的,要记得清中断。
其实,这个功能挺有用的,可以用来刷时间,当接收到中断刷新一次时间即可。也可以用作一些周期性任务,且保证跟时钟同步。
然而。。。当在实时系统里操作时就有麻烦了,时钟是共享资源啊,使用时要保护。本来可以把清CTFG放在中断里的,在操作系统里这样操作就是一个很坏的主意。。。
一周热门 更多>