在线时间66 小时
UID3239593
注册时间2016-4-20
NXP金币0
TA的每日心情 | 开心 2016-10-25 10:29 |
---|
签到天数: 1 天 连续签到: 1 天 [LV.1]初来乍到
中级会员
 
- 积分
- 272
- 最后登录
- 2019-6-10
|
本帖最后由 足球爱好者 于 2016-9-5 15:09 编辑
走过路过的版友,有闲暇时间的帮帮小弟解答这几个问题,在这里先谢过了
现象:
我之前使用的引脚外部中断都是下拉中断,现在因为工程需要要使用上拉中断,但我发现当我配置外部中断时,无论我如何配置引脚,引脚都是高电平。之前觉得可能是因为引脚复用问题,但我换了多个引脚,包括从GPIOA换到GPIOB都一样。当我仿真查看寄存器时,发现PORTx_PCRn寄存器中的PS位,始终是1,清不了0.这位是控制引脚上拉状态还是下拉状态。因为这位始终是1,所以是上拉状态,因此我选择下拉产生中断没什么问题。
问题:
1:PS位为啥不能清0
2:我该怎么配置可以使用上拉中断。
3:我之前认为引脚复用是PORTx_PCRn寄存器中的MUX位控制,是否我错了?MUX位中的值2~7代表什么?那里可以看是哪一种外设功能的复用。(串口引脚我知道是要选择0x02)
4:是否可以GPIOB1 GPIOB2(即是同一端口,多个引脚)先后产生外部中断?如果可以,那个中断服务函数怎么写?现在我只知道有这两个中断函数 void PORTB_IRQHandler() void PORTA_IRQHandler()。
刚刚忘了上程序了。。。
int main(void)
{
SIM->SCGC5 |= 1<<10; //打开端口B时钟
SIM->SCGC5 |= 1<<9; //打开端口A时钟
exti_init();
while(1)
{
}
}
void gpio_init(void)
{
配置为输入模式
temp =GPIOA -> PDDR ;
temp &= ~(1<<12);
GPIOA -> PDDR = temp;
//先清
PORTA -> PCR[12] &= ~(PORT_PCR_MUX_MASK|PORT_PCR_IRQC_MASK | PORT_PCR_PS_MASK | PORT_PCR_PE_MASK);
//配置 GPIO 口,下降沿中断 , pull使能 ,选择上拉使能(引脚下啦时能产生中断)
//PORTA -> PCR[12]|= PORT_PCR_MUX(0x01)| PORT_PCR_IRQC(0x0a)| PORT_PCR_PE_MASK|PORT_PCR_PS_MASK;// 配置 GPIO 口,上升沿中断 , pull使能 ,选择下拉使能
(这种模式下,端口始终处于高电位,没办法产生中断)
PORTA -> PCR[12]|= PORT_PCR_MUX(0x01)| PORT_PCR_IRQC(0x0a)| PORT_PCR_PE_MASK;
NVIC_EnableIRQ(PORTA_IRQn); //使能中断
NVIC_SetPriority(PORTA_IRQn,2); //设置中断优先级
}
void PORTA_IRQHandler()
{
PORTA -> ISFR |= 1<<12;
GPIO_TogglePinsOutput(GPIOB, 1u << 6);
}
|
-
MUX位
-
PE位和PS位
|