|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
28335外部中断基本特点. e% x2 ]( S: P9 s: y5 i
6 F* I$ Y; {7 V
0 ~' n: M# w/ ~" e) j9 @, }7个可屏蔽中断源和1个不可屏蔽外部中断源
; k9 F6 }- E. ~; Q' c q0 TGPIO0-31可选的中断源为XINT1(可屏蔽中断),XINT2和XNMI(不可屏蔽中断)9 g4 k3 r+ n( d+ p. Y
GPIO32-GPIO63可选的中断源为XINT3-77 |: w0 C8 C- v* E+ o& a/ j
外部中断的触发方式可选上升沿或下降沿触发
9 ~& q# `/ r, e( z**外部中断外设和其他外设不一样,在中断函数中只用清除PIE中断即可不用清除外设中断**。2 Y1 W$ g* y0 z# w. T
8 S* l3 H% m% p n9 q% a! w外部中断配置过程- n' }2 H- ~* z( T% Z* ]
) \. e8 r5 A3 ?# V0 M! J6 r. ]# u4 q* o/ x+ O
其实28335的外部中断配置相对其他外设的配置来说比较简单。不过需要注意XNMI和CPU定时器1中断一起使用时,需要将其中断的映射位置配置好。
. x7 u) }" d# [
8 `6 V; Z. ]4 ^8 k8 c
9 H: {/ H% f7 s**首先将需要配置的GPIO端口配置为通用输入端口**。**上拉不上拉**,采样次数和与不与系统时钟同步都无所谓,不会影响中断的配置。不过如果噪声过大的话,建议使能上拉和选择合适的输入采样滤波。这里以GPIO34为例,将其配置为上升沿触发XINT3的中断输入源。下面所有寄存器的配置受到EALLOW的保护,因此需要解除保护在进行设置。
9 W- Z- x7 R3 EGpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0; //相应端口配置为通用IO
: T/ E( N6 N) I. o& ^( c6 o: dGpioCtrlRegs.GPBDIR.bit.GPIO34 = 0; //输入) U0 Y6 I- x2 I# g
GpioCtrlRegs.GPBCTRL.bit.QUALPRD0 = 1; //输入滤波采样周期为2*1 Tsysclk(系统时钟)+ h; P, `( A" f* E" ^& s3 h/ c, ?
GpioCtrlRegs.GPBQSEL1.bit.GPIO34 = 1; //三次采样/ _3 o/ c5 e( |1 Y- R
GpioCtrlRegs.GPBPUD.bit.GPIO34 = 0; //使能内部上拉
' ?& i; m" M, l5 z! e将GPIO配置到响应的中断源上。
7 c) L, g+ G# ^, p//下面这句话按手册应该赋值为2,但是写34也没错,想一想为什么?% ~8 b9 H; x' c# |0 X C$ E+ s t7 @
GpioIntRegs.GPIOXINT3SEL.bit.GPIOSEL = 34; //选择34端口为外部中断3中断源5 u! l. |8 j" e) F
选择触发中断的方式。
: u8 h) m$ ~9 s) X- T6 K: n& k$ ?XIntruptRegs.XINT3CR.bit.POLARITY = 1; //上升沿触发( K z6 W# X& R
使能外部中断" `" w% p6 t$ N6 J
XIntruptRegs.XINT3CR.bit.ENABLE = 1; //使能外部中断
! u& @# y9 l% e% \. r! M最后使能PIE中断和CPU中断,如果需要还可以重新定义中断入口函数。 a- \( w. M Z4 N- Z0 X. w
PieCtrlRegs.PIEIER12.bit.INTx1 = 1; //使能PIE外部中断3
" y. F y7 q) i v9 wIER |= M_INT12; //使能第十二组CPU中断
* R: F! s H) A, G% z Z/ wPieVectTable.XINT3 = &Xint3_ISR; //从新定义中断入口函数( c6 \6 j& b7 |; i/ M9 A9 }8 x
上面基本上已经完成了外部中断的配置,但是对于XNMI来说需要加入下面这句话,以防止CPUTimer1中断连接到不可屏蔽中断上。
$ p- j, H9 V" K5 O0 tXIntruptRegs.XNMICR.bit.SELECT = 0; //Timer1连到int13,XNMI连接到NMI
# N5 ^! d9 Y: g# O% B
! c- g+ P/ p5 N: X& X, Q/ X8 c( ]. U; ?4 w
|
|