找回密码
 注册
关于网站域名变更的通知
查看: 982|回复: 2
打印 上一主题 下一主题

[经验] DSP28335定时器和外部输入中断

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2016-6-28 14:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
外部中断初始化
% _0 j8 ]+ ]/ f#include "extint.h"! [( a/ Y/ L+ J
//按键和外部中断都用了GPIO13,查询和中断不能同时使用
1 Z, Q" _1 |5 Pvoid InitExtInt(void)
  }, D6 E! d; K: p( H; ^3 j6 ]{  \, g; P' }2 n: Y- F2 q
     EALLOW;
$ H5 T! K! F! ]! R( S  n& A     GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 0;+ x0 |' g& J1 k: g
     GpioCtrlRegs.GPADIR.bit.GPIO13 = 0;           //作为输入IO口
3 i- q) O% A' l6 ~0 NGpioCtrlRegs.GPAQSEL1.bit.GPIO13= 0;          //和时钟同步7 O$ A$ c% T7 A0 T# _" J+ v
     GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 13;    //选择GPIO13为外部输入XINT1输入引脚
. x0 f. j) m7 a7 OXIntruptRegs.XINT1CR.bit.POLARITY= 0;         //下降沿触发中断( A& ~( }) n  j  G  |0 k( v  K. b
XIntruptRegs.XINT1CR.bit.ENABLE = 1;          //使能XINT1中断
2 P# O. V$ @( Q; YEDIS;
, p. e  L4 Z: z- e# ]% {) Y}# n- t+ `# H5 _1 c: i' ]0 U

5 R8 d7 e0 i8 o% {//外部中断1服务函数  ,按下按键,进中断,亮灯响鸣
2 f. ~6 C; m* y* F, Z3 v' binterrupt void ISRExint1(void)
7 E* j6 ]" C5 |, P3 C$ y  Z& z& K{
% a2 b5 d- _( R* \; P5 P) ]' n  }        PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;+ B- p  W, h9 }% ^; F
DELAY_US(1000);
6 s$ q, r: U* @7 [8 i2 f1 Oif(GpioDataRegs.GPADAT.bit.GPIO13 == 0)
  E  }/ o% _# p: h) G{& J% X9 L; }/ W2 J2 V. }' m6 e
    LED4=~LED4;- R5 v' f- I2 y) W. Y
    BUZZ_ON; @! W0 F  m0 i/ \, d3 K
    DELAY_US(100000);
6 {- q: ], ~% R8 l# G& S    BUZZ_OFF
9 g4 D6 U0 e+ s0 @      DELAY_US(100000);
/ q  g& `% A6 Z( t& r% [    BUZZ_ON" s% z" d9 \: b4 x4 v0 U
    DELAY_US(100000);
1 W7 @; ~% c8 m; K  U: y$ a# }    BUZZ_OFF
' D# K. `6 E, z9 s, r    }
9 A& O9 a4 j( |* Y" K, J}2 ?& {% S: n. M. ^7 Q4 O

2 P2 r) S! k4 s& V9 H. {1 R9 o2 O  Y
, t  \) D" B$ r  g% R  j, J定时器0,1,2中断初始化  J1 U8 h9 G+ W* Q
    InitCpuTimers();   // For this example, only initialize the Cpu Timers  y6 B  \! N* J& h! v- D# I
    ConfigCpuTimer(&CpuTimer0, 150, 500000);  // 500us 150MHz CPU Freq, 1 second Period (in uSeconds)6 f& N6 u6 |6 Y+ z+ K$ q
    ConfigCpuTimer(&CpuTimer1, 150, 1000000);6 b* C. e7 J9 n/ S5 v7 A
    ConfigCpuTimer(&CpuTimer2, 150, 3000000);) @  g3 H3 @- y' y) M' `
    StartCpuTimer0();
) j$ v7 M. @1 V- n/ Y3 E2 {- L    StartCpuTimer1();2 q: l% P8 a7 z7 O
    StartCpuTimer2();& _2 T) t2 n8 |1 ]1 ^

: @  L* g; Q. v  K# |
4 \  A4 T% {" t9 O7 S#include "timer.h"
5 D8 G, i. b; A* X( z* u" {interrupt void ISRTimer0(void)
$ z! L7 z4 M' E5 B{
' |0 |" O2 m" p1 M    static u8 timer0_count=0;% |5 k7 X" Z0 S2 m; z; T
// Acknowledge this interrupt to receive more interrupts from group 1  D+ E1 l  c5 `- T
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; //0x0001赋给12组中断ACKnowledge寄存器,对其全部清除,不接受其他中断$ O. {$ h) S/ ^7 G2 b5 B
    CpuTimer0Regs.TCR.bit.TIF=1; // 定时到了指定时间,标志位置位,清除标志
8 v# I7 I+ X! C    CpuTimer0Regs.TCR.bit.TRB=1;  // 重载Timer0的定时数据
/ C3 l" W6 k1 R/ ^" t" J
' Z) F/ E' w  F( `) M    timer0_count++;& r  ~+ c4 ?9 q! ~
    if(timer0_count==4)  //2000ms =2s0 O3 n4 b& u* F  T4 u$ Z0 q
    {1 Z1 a7 e, S' V9 N& \0 p$ g( J/ v
    timer0_count =0;
& h3 }( B% s& l: }. i  W% C    LED1=~LED1;- Q% d$ ~, v: |7 u& V7 e
    }& Y- c7 F1 L1 W( l. K2 b* R
}
6 Z5 |' ^  y3 |7 |
1 H; P# x% Z+ a7 Q" H& Z8 U' _/ n2 ~) X
//1s
: ?# T. k' m9 K5 K% Ointerrupt void ISRTimer1(void)0 J) r$ K) ], X, c6 S: V
{
  o7 A5 A6 e  ]& Q8 H5 r    static u8 timer1_count=0;
6 X/ t% O* H# u# h" s$ |  G2 K// Acknowledge this interrupt to receive more interrupts from group 1
3 K4 z8 h8 ?* g' d    //PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; //0x0001赋给12组中断ACKnowledge寄存器,对其全部清除,不接受其他中断0 l6 q/ B/ Y" n- k
    CpuTimer1Regs.TCR.bit.TIF=1; // 定时到了指定时间,标志位置位,清除标志/ W' u0 ?. k; q0 t
    CpuTimer1Regs.TCR.bit.TRB=1;  // 重载Timer0的定时数据
7 v" V8 i8 U, R6 ~+ m2 V0 b0 O. u) a$ T4 |; e
    timer1_count++;
! W$ r; c1 y1 Z$ Q4 C    if(timer1_count==1)
3 z6 W" u' B* l5 H( k( h5 n# K2 O    {- I2 K( o! q* b! h  b
    timer1_count =0;7 m3 ^- q: ?1 p% F; |, U8 ]( o
    LED2=~LED2;
. l- P5 L% n" A  V( q    }+ S5 a6 i. s6 m1 B
}4 t" w- }  Z5 `

* u& ^( w0 N+ ?//3s
; s" y* k1 }/ {( ^# S% ?interrupt void ISRTimer2(void)" ~  M: X6 o2 |& D/ p+ @* G$ o
{
* y' o1 ^/ `' N$ Z) p9 v    static u8 timer2_count=0;
$ @) O, o& V* O, R// Acknowledge this interrupt to receive more interrupts from group 1
# V% V+ l, S+ I: Z$ y( d3 O    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; //0x0001赋给12组中断ACKnowledge寄存器,对其全部清除,不接受其他中断
: }: X" S) M6 e2 N; v    CpuTimer2Regs.TCR.bit.TIF=1; // 定时到了指定时间,标志位置位,清除标志" z' a# f$ ~6 [( O, X
    CpuTimer2Regs.TCR.bit.TRB=1;  // 重载Timer0的定时数据. b& a5 v8 H# ~# U* j
1 k  ]. C4 X3 n- O2 t4 u; @
    timer2_count++;
% F3 K  v: o: E0 V' ^* i0 M    if(timer2_count==1)$ B5 Q9 A" S, u
    {. F; ~) u) \+ R% F: E
    timer2_count =0;1 ~7 t, H1 H6 m; f8 d9 d
    //LED3=~LED3;
+ w. I/ C  ]" O' K& y    }
# c( o" G* _. P7 T$ i- Q: d/ [}3 T* A, {* n! q1 E' z0 q1 j
+ @+ v/ C. |8 _5 w+ f0 ^
指定中断服务函数地址6 H1 s2 v& a4 C# _/ O
     EALLOW;  //  protected registers9 W. [, M) u, G7 [7 G3 V8 E
    PieVectTable.XINT1 = &ISRExint1;  //外部中断1服务程序
  m/ }, R7 U: Q$ T, u    PieVectTable.TINT0 = &ISRTimer0;   //定时器0中断服务
" ]4 a0 {$ e# U8 x* N+ f/ y: n    PieVectTable.XINT13 = &ISRTimer1;   //定时器1中断服务" ?6 Y; }) L7 x5 v2 Y( J, _
    PieVectTable.TINT2  =  &ISRTimer2;    //定时器2中断服务6 ]9 }' M# f* n1 P$ M- g- P* X
    EDIS;    // This is needed to disable write to EALLOW protected registers. n# J+ v& Y  j& \9 q

5 f! K  w7 p- @$ C* }6 _! g  y开CPU级中断
7 r$ `4 |* C0 P- B  c( I; i3 B" r    IER |= M_INT1;    //开启CPU中断 组15 _% j- E0 B* x2 F$ H
    IER |= M_INT13;   //开启CPU中断 13   XINT13 / CPU-Timer10 j8 \* F( ?. X$ W
    IER |= M_INT14;   //开启CPU中断 组14 TINT2
5 W) d  o5 G# N9 ~( ~   
1 ?( T1 y# d' b6 x7 M6 i; w+ E3 p    PieCtrlRegs.PIEIER1.bit.INTx7= 1;  //CPU定时器 TIMER0中断   组1的第4个中断使能7 t8 `! {2 a" O
    CpuTimer1Regs.TCR.all = 0x4001; // 使能TIMER1 Use write-only instruction to set TSS bit = 0! h+ B# Q( [5 u" g4 B$ S+ {3 h+ }7 T
    CpuTimer2Regs.TCR.all = 0x4001; // 使能TIMER2 Use write-only instruction to set TSS bit = 0
0 F" m/ M4 _) l' @. S; D
6 s9 W: x: Q# r4 {+ H5 j' _* o    EINT;   //开启全局中断
; N( f' ?* r5 P8 ^% x7 V5 ?; b    ERTM;   //开启全局实时中断,调试用DBGM

该用户从未签到

2#
发表于 2016-6-29 09:53 | 只看该作者
资源多,学习不止步
4 D) B8 D& `* n7 F$ f" F

该用户从未签到

3#
发表于 2016-6-29 10:08 | 只看该作者
必须赞一个~
, G1 Q& c, Q% k7 ^, G# `
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-4 18:39 , Processed in 0.156250 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表