GPIO和GPIO中断"/>
关于GPIO和GPIO中断
1.GPIO分组
GPIO:有三组A(0-31);B(32-63);C(64-87)
2.GPIO寄存器
1.控制寄存器GpioCtrlRegs
- Mux:0表示普通
- DIR:0表示输入
- Pud:0表示使能上拉
- QUALPRDn:用来定义采样周期,用于滤波
- QSELx:用来定义采样窗有几个采样周期
2.数据寄存器GpioDataRegs
- GpioDAT:若IO输入可读取其电平;若IO输出写1输出高电平
- GPioSET:写1置1
- GpioCLEAR:写1置0
- GPioTOGGLE:写1反转
3.中断寄存器GpioIntRegs
DSP的外部中断源共有7个,分别为XINT1-XINT7。其中XINT1和XINT2对应GPIO0-GPIO31;XINT3,4,5,6,7对应GPIO32-GPIO63。
- GPIOXINTnSEL:选IO口
- XINT1CR.bit.POLARITY:选触发方式
- XINT1CR.bit.ENABLE:确定使能
3.什么叫采样滤波?QUALPRDx和GPxSEL什么关系
就得在GPIO输入的时候,通过好多个周波内对GPIO的值进行确认,如果这几个周波内的值都一样,就确定GPIO的输入值。这个时候QUALPRDx和GPxSEL刚好对应了一个周波的周期和几个周波
4.GPIO中断
首先得用于中断的GPIO口,然后确定外部中断所用的中断源。然后就是外部中断触发方式,外部中断是否使能。
5.例子
void EXTI_Init(void)
{
配置GPIO34,在B组
GpioCtrlRegs.GPBMUX1.bit.GPIO34=0;//普通
GpioCtrlRegs.GPBDIR.bit.GPIO34=0;//输入
GpioCtrlRegs.GPBPUD.bit.GPIO34=0;//上拉
GpioCtrlRegs.GPBCTRL..bit.QUALPRD0=1;//周期2*1个系统时钟
GpioCtrlRegs.GPBQSEL1.bit.GPIO34=1;//三次采样
//配置GPIO的中断
GpioIntRegs.GPIOXINT3SEL.bit.GPIOSEL=34;//3是用的XINT3
XIntruptRegs.XINT3CR.bit.POLARITY=1;//上升沿触发
XIntruptRegs.XINT3CR.bit.ENABLE=1;//允许外部中断
//中断那一套:开PIE中断,开总中断,开位中断,中断入口,中断函数
EALLOW;
PieVectTable.XINT3=&EXTI_IRQ1;
EDIS;
PieCtrlRegs.PIEIER12.bit.INTx1 = 1;//使能PIE组12的INT1,指的就是XINT3
IER|=M_INT3;
EINT;
ERTM;
}
//定义中断函数
interrupt void EXTI_IRQ1(void)
{//程序PieCtrlRegs.PIEACK.bit.ACK1=1;
}
更多推荐
关于GPIO和GPIO中断
发布评论