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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
外部中断初始化$ \" P3 Z" t9 H0 P' X
#include "extint.h"3 i7 _; {; U6 o
//按键和外部中断都用了GPIO13,查询和中断不能同时使用
. i" @' y5 c' n# Z% \void InitExtInt(void)& R9 ^8 i/ G6 k
{9 q, l3 c, f$ H0 q0 M4 G# k% N
     EALLOW;
% C, J3 F: f( T2 P! x6 r     GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 0;
4 W4 k! ]- \' I- G8 {     GpioCtrlRegs.GPADIR.bit.GPIO13 = 0;           //作为输入IO口1 [2 f: Y( V/ _) K$ i3 a4 e: {' S
GpioCtrlRegs.GPAQSEL1.bit.GPIO13= 0;          //和时钟同步1 g4 E: ~* q9 @. Y3 ]7 v
     GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 13;    //选择GPIO13为外部输入XINT1输入引脚( b, x) Y- _, }$ \3 w
XIntruptRegs.XINT1CR.bit.POLARITY= 0;         //下降沿触发中断7 `" ?! r8 o7 E& I( [8 p# ]& c6 N
XIntruptRegs.XINT1CR.bit.ENABLE = 1;          //使能XINT1中断
+ _1 H+ s  ]: c' m$ `7 p; lEDIS;$ A! l& _- [( m% a* k0 b" `
}
0 z5 Y3 n' h; G4 g! W4 n3 ^) H2 Q/ }
//外部中断1服务函数  ,按下按键,进中断,亮灯响鸣
( t. M  Z3 p, j# y4 T  kinterrupt void ISRExint1(void)
6 F) _: u; L: s' f/ o- K7 \{% ~4 G. ?5 B. w5 @
        PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
; O8 r6 M' Z! Y" qDELAY_US(1000);
$ Q+ g- d( i0 D. r1 |# qif(GpioDataRegs.GPADAT.bit.GPIO13 == 0)
, _) u4 k$ j; d& @, C{  N  X- ~( W5 ?6 l5 X7 F$ I
    LED4=~LED4;
: ^( E$ Q/ Z2 M$ y8 r    BUZZ_ON
8 u  k- c  `6 h/ v# B    DELAY_US(100000);
( i+ J% O  T% ^3 p/ U4 r    BUZZ_OFF
& a" K3 Y8 m* L# j) f; U      DELAY_US(100000);) q; p8 I: I* O; Q
    BUZZ_ON+ L8 ^6 l" a# w6 S5 x; V2 P0 ^
    DELAY_US(100000);
& k; W. V! g& Q, }7 Y6 u, b1 j    BUZZ_OFF
, }* n+ Z; U# N    }
4 y: c6 y$ W* ~2 R}- {( h; n' ~' |: j; ~5 A* T
7 [0 ~% S+ q! S5 u

, ]6 x+ }; U6 L% s% F定时器0,1,2中断初始化% A5 \) E6 M0 |& h- |8 V
    InitCpuTimers();   // For this example, only initialize the Cpu Timers
6 C+ X9 z5 B: G) q- V0 Y8 f    ConfigCpuTimer(&CpuTimer0, 150, 500000);  // 500us 150MHz CPU Freq, 1 second Period (in uSeconds)- L+ ?$ X8 y! r
    ConfigCpuTimer(&CpuTimer1, 150, 1000000);
" F- ~8 {. Z. X/ q; x; ^7 P    ConfigCpuTimer(&CpuTimer2, 150, 3000000);( ], B* u" Z6 ~
    StartCpuTimer0();
7 L% f5 c- C/ @1 T, S9 q- ?  E    StartCpuTimer1();+ F/ I: b9 u5 m; @
    StartCpuTimer2();
' V3 r( v% Z$ c4 M6 ~) Q, f( {. H
8 b+ S/ h4 S% j  T+ S/ S$ B& F: {( B
#include "timer.h"
3 e: |- M! K: ]* v4 j& K' Tinterrupt void ISRTimer0(void)
; h. }" T& `8 `( K+ O{: `. G/ D0 V) n' M' g' j5 B- F& ]) B5 W
    static u8 timer0_count=0;
8 Z, Z: l; y9 Z// Acknowledge this interrupt to receive more interrupts from group 1) ^' e8 R; ~+ z" t- b
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; //0x0001赋给12组中断ACKnowledge寄存器,对其全部清除,不接受其他中断
" ?0 f) p& M7 t" s9 {7 y; ^    CpuTimer0Regs.TCR.bit.TIF=1; // 定时到了指定时间,标志位置位,清除标志
" }. D' ~1 R( M' J) P    CpuTimer0Regs.TCR.bit.TRB=1;  // 重载Timer0的定时数据
- @5 Y) u4 M' Y; R$ a" a4 c4 b/ p* C
    timer0_count++;
" A- s, u9 D# X. u0 |7 n    if(timer0_count==4)  //2000ms =2s
$ O' [& X3 x8 ]; l    {! E3 i* y9 s* B; Q4 A$ \
    timer0_count =0;5 B# G7 \# M9 Z$ B# [2 k+ `6 ^
    LED1=~LED1;
" f, Y4 c) n( j: H% ^0 I* ?+ u9 ~    }% F7 W% R0 ?0 {; d
}$ _) A1 q: Z5 r' i  A- u. V
" N$ Q: R0 ~' T4 \. r# l3 ?

# g7 p2 M4 k0 O) B% H- \//1s- S/ r1 L& H( @& T- Y/ q
interrupt void ISRTimer1(void)' n* Z0 B. h/ S9 `" v; x0 a
{
0 e$ l. _' }" m, M; _3 k& U; p    static u8 timer1_count=0;2 k9 f8 z9 Y, ^6 w* |
// Acknowledge this interrupt to receive more interrupts from group 1
* l0 `* ^6 u8 b/ R$ [) |" I    //PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; //0x0001赋给12组中断ACKnowledge寄存器,对其全部清除,不接受其他中断# O9 A7 T2 P, n' J# S2 I+ N: |
    CpuTimer1Regs.TCR.bit.TIF=1; // 定时到了指定时间,标志位置位,清除标志) W. p9 U1 k. k/ M4 i3 K5 Y
    CpuTimer1Regs.TCR.bit.TRB=1;  // 重载Timer0的定时数据7 n7 Q( e, }- `: c! n

& o2 }4 p; ~, N8 A0 V! M% x+ P9 o    timer1_count++;, ~0 p/ ~& \" i4 W/ Y1 U
    if(timer1_count==1)
, `+ i7 g3 i" b9 e1 k) c, K  N, s) r    {/ u# l, r1 ~; u0 S; C
    timer1_count =0;+ C7 V3 ^9 {" I5 }8 v
    LED2=~LED2;5 ~' u" m. c: A6 e
    }0 ?! s0 a, w$ X
}1 i+ M0 `# P1 [9 O% J

7 E3 K* q2 I; E) M7 s; d//3s
+ X* {8 a! T$ c" s0 ~interrupt void ISRTimer2(void)$ S& A7 r1 Q2 }% M- }0 Z+ a
{
0 E$ t7 `8 f1 E) B( t    static u8 timer2_count=0;
3 z4 A9 b- [- [" I5 Z// Acknowledge this interrupt to receive more interrupts from group 1' T2 J+ e) p0 ]. |# B$ r
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; //0x0001赋给12组中断ACKnowledge寄存器,对其全部清除,不接受其他中断! j* l: B# F( R& O
    CpuTimer2Regs.TCR.bit.TIF=1; // 定时到了指定时间,标志位置位,清除标志
* ?# y( y3 p% Z! d" K/ K+ k    CpuTimer2Regs.TCR.bit.TRB=1;  // 重载Timer0的定时数据! |- q  O; F" `( I
0 G5 n+ d( m4 ~5 d9 i" {
    timer2_count++;+ c' l& o% z9 r% b
    if(timer2_count==1)
) b6 R! W9 x* h7 q' g( R    {6 y3 I. M* ^3 [
    timer2_count =0;2 Q% n6 W5 v0 a( ^
    //LED3=~LED3;' U! G& y( c6 {* `
    }7 {9 e6 ~& l5 Q, G/ u$ I
}6 \$ S0 `% Y6 D# [( p" k$ j( e( h  L
' o1 w. ?& i1 `- Z
指定中断服务函数地址: M! o; {4 f/ z$ G! S
     EALLOW;  //  protected registers7 V5 y2 g' l( x' K9 E2 V8 T% `% X/ W
    PieVectTable.XINT1 = &ISRExint1;  //外部中断1服务程序- D, G4 J* k+ L" q/ W  c/ O* x9 S; h+ {
    PieVectTable.TINT0 = &ISRTimer0;   //定时器0中断服务" n4 K$ j  G( f7 b
    PieVectTable.XINT13 = &ISRTimer1;   //定时器1中断服务# t  c0 X! X! \4 h
    PieVectTable.TINT2  =  &ISRTimer2;    //定时器2中断服务
2 g' S/ e+ I- A% \* p/ |    EDIS;    // This is needed to disable write to EALLOW protected registers# z" p( {" O. B4 t) n
( R) W9 X5 S4 t3 u( v% G
开CPU级中断* \5 @% f, f4 f% X4 y
    IER |= M_INT1;    //开启CPU中断 组1) y+ k1 \& B) ^: {6 S4 w- ^8 _
    IER |= M_INT13;   //开启CPU中断 13   XINT13 / CPU-Timer1/ X7 k! E, \8 Q, H5 I9 c
    IER |= M_INT14;   //开启CPU中断 组14 TINT2
8 x" S# Q1 {! c* I: j: g) L2 \    & x+ `: x3 Y' h, W
    PieCtrlRegs.PIEIER1.bit.INTx7= 1;  //CPU定时器 TIMER0中断   组1的第4个中断使能
9 x; n' Q8 ?1 A: z' C    CpuTimer1Regs.TCR.all = 0x4001; // 使能TIMER1 Use write-only instruction to set TSS bit = 0; s& I0 a$ `5 A, P3 A  k* v& q) H7 n* m; k
    CpuTimer2Regs.TCR.all = 0x4001; // 使能TIMER2 Use write-only instruction to set TSS bit = 0
7 Z/ M: L2 D: l. m# n. a3 A9 V! `' A7 r/ [
    EINT;   //开启全局中断
0 W* X) ^0 K5 P) u% g    ERTM;   //开启全局实时中断,调试用DBGM

该用户从未签到

2#
发表于 2016-6-29 09:53 | 只看该作者
资源多,学习不止步4 L, q' `+ p: ?3 s% I/ E  a

该用户从未签到

3#
发表于 2016-6-29 10:08 | 只看该作者
必须赞一个~
( ~) q: q$ O: z' d) J
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-24 17:22 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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