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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
外部中断初始化
( [" H! a0 Y! X* _& `* o#include "extint.h"5 T8 ?( @9 P3 V  N
//按键和外部中断都用了GPIO13,查询和中断不能同时使用) w: @* N6 x' y" R5 A  A1 b
void InitExtInt(void)5 Z* y* d: I6 r. f- T8 c
{
4 }, c5 ]  T/ T/ `     EALLOW;6 V! O0 L+ o* u2 R
     GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 0;
. C6 z0 B: }. L( z, u% ^     GpioCtrlRegs.GPADIR.bit.GPIO13 = 0;           //作为输入IO口
8 q7 J8 s2 `) x- G, `GpioCtrlRegs.GPAQSEL1.bit.GPIO13= 0;          //和时钟同步0 L3 @6 S2 Y. K5 Y
     GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 13;    //选择GPIO13为外部输入XINT1输入引脚& j$ v4 K1 l, M9 i/ p* [
XIntruptRegs.XINT1CR.bit.POLARITY= 0;         //下降沿触发中断/ L, \6 N% ~# Q: l+ g9 b
XIntruptRegs.XINT1CR.bit.ENABLE = 1;          //使能XINT1中断
& C5 y8 ?! x5 B" H$ |EDIS;
  w8 q  Y# L' Z/ T0 f4 ~. S0 g}
0 X4 ?$ D% ?7 D& Y& f: c7 Q$ x9 L6 O. L/ _
//外部中断1服务函数  ,按下按键,进中断,亮灯响鸣
1 E; O1 V3 |* A* iinterrupt void ISRExint1(void)) z: \% d7 ~# T$ X- H
{
* b$ W* B# |* d, z7 ]        PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;- m  J, h. b/ g& I4 Q, U6 |
DELAY_US(1000);
: L- a" M, m& I- ]if(GpioDataRegs.GPADAT.bit.GPIO13 == 0). D  o- Y2 L- f" ]9 @: U
{
) q. f  i* }, d8 v1 h    LED4=~LED4;
9 L8 n4 M, L9 z  D    BUZZ_ON2 m8 t3 w! u8 p3 k: n/ B
    DELAY_US(100000);
. O0 ?% L: F" W: R    BUZZ_OFF' K& o  @$ \5 g) f, l7 H
      DELAY_US(100000);2 h- R. Z8 H2 `5 K
    BUZZ_ON
" b' d' c2 s! }2 c    DELAY_US(100000);* Y, b! ]! {  V  o. _0 h
    BUZZ_OFF
  _$ P/ H- ~' g) P, b: n1 i* }* i9 `    }
0 P# X+ ^* E; S! g7 `% Z}5 x; m/ f9 E. Y2 p6 G; z1 z! B
& }3 F: v! B( e  m
: v$ F3 c  m# T3 O) i0 q
定时器0,1,2中断初始化% ~/ \5 P5 i7 |
    InitCpuTimers();   // For this example, only initialize the Cpu Timers
+ j- n7 M) u& m6 Q! _    ConfigCpuTimer(&CpuTimer0, 150, 500000);  // 500us 150MHz CPU Freq, 1 second Period (in uSeconds)
9 T7 i+ p/ h& w9 d$ r: {    ConfigCpuTimer(&CpuTimer1, 150, 1000000);4 o2 E) G! i. D  y- c0 h' G* P2 Y
    ConfigCpuTimer(&CpuTimer2, 150, 3000000);" |/ I% h4 _( G
    StartCpuTimer0();. F3 d  |& ]8 g) V5 t$ f9 D
    StartCpuTimer1();
6 d% K4 K- ?/ h0 o    StartCpuTimer2();8 ~$ {) y' P$ e' r5 N, _
+ F, v& ?0 T2 A

: P. P) h8 s- G/ ^0 f#include "timer.h"! _+ e+ j' i: A4 V5 E
interrupt void ISRTimer0(void)
0 a; `. ~0 I; O4 g{
  f8 F! R6 ~9 v, G    static u8 timer0_count=0;
! X, ^! C/ _" v* h1 Y, H// Acknowledge this interrupt to receive more interrupts from group 1: @' N, Z4 O5 w
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; //0x0001赋给12组中断ACKnowledge寄存器,对其全部清除,不接受其他中断: J" X: R. Q: O+ x( ?  g" s
    CpuTimer0Regs.TCR.bit.TIF=1; // 定时到了指定时间,标志位置位,清除标志% ~3 S4 @$ Z$ `  Y. U2 T
    CpuTimer0Regs.TCR.bit.TRB=1;  // 重载Timer0的定时数据
4 `2 v1 r2 h2 |1 b( ]7 U, U* H  P$ k
    timer0_count++;: i& A3 r4 _! e* G
    if(timer0_count==4)  //2000ms =2s
1 t! n0 k& P% M" N. Y5 R    {
8 v+ e) t/ p0 v3 A* |/ G) e+ Y2 ^    timer0_count =0;8 H& N( F! Y2 M7 P2 K0 V5 _* F1 `
    LED1=~LED1;
2 p3 S4 {+ P% y2 @    }& d+ q# d3 g2 I8 t$ K
}* r1 _; p/ [/ Z" ?- e
0 R: k) |' X. v, I
) G' V0 W+ L2 N# P* i6 q
//1s% z/ V+ ^- H5 {. N5 x
interrupt void ISRTimer1(void)
  c" ^" B# \3 S- e5 i{+ e9 x' n" e& c5 @3 r0 L
    static u8 timer1_count=0;
, v$ [2 G* Z0 P) U0 q$ Y' q// Acknowledge this interrupt to receive more interrupts from group 1
1 L# e7 K# i6 L2 R5 C) N7 Q' n    //PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; //0x0001赋给12组中断ACKnowledge寄存器,对其全部清除,不接受其他中断
! Q/ K- ^: C7 r3 a6 P0 g! u, Y    CpuTimer1Regs.TCR.bit.TIF=1; // 定时到了指定时间,标志位置位,清除标志; _* O# C+ C! X& H
    CpuTimer1Regs.TCR.bit.TRB=1;  // 重载Timer0的定时数据# Z5 {3 d. i$ o8 X' L
% ?: r9 w! z, d+ Q5 c7 n
    timer1_count++;) k6 J5 X& @: ]3 ~* G5 ?5 ^
    if(timer1_count==1)/ N8 y$ j, }# @/ U
    {7 w% s2 f+ n! A: l" T$ u, h
    timer1_count =0;
" J6 C! J5 T) O0 Y' K, N) f    LED2=~LED2;
' v4 ^$ b0 Z1 x4 h) r    }
& y/ s! X+ R- a8 k- Q# n8 s}
7 F7 P0 f9 c/ @- i* H0 t. g) n; U, R5 K  _! |8 V9 }6 h* l) R
//3s# b5 q7 p2 h7 w* o4 q2 M0 N
interrupt void ISRTimer2(void)/ o# ]/ y6 x6 L  ^
{3 f7 A, s0 ~, B5 ?  \1 G, H
    static u8 timer2_count=0;8 z, D* N' J" T5 W2 t
// Acknowledge this interrupt to receive more interrupts from group 1" ?$ [+ A( e1 f4 l+ ~" V( g. U7 V
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; //0x0001赋给12组中断ACKnowledge寄存器,对其全部清除,不接受其他中断
& J4 h- }3 ~6 m. h, U" w    CpuTimer2Regs.TCR.bit.TIF=1; // 定时到了指定时间,标志位置位,清除标志4 r5 G4 s# S, |  ^& o0 ^9 N
    CpuTimer2Regs.TCR.bit.TRB=1;  // 重载Timer0的定时数据) D. Z+ h( [5 I% \
! ~/ C5 A* a9 @5 u, o* }7 E' W
    timer2_count++;
3 A3 D; N# F; }3 B    if(timer2_count==1)
* F5 ?/ F3 E; K; w/ Q6 y    {3 C: X  }; B1 e* q5 H  g' F5 Q
    timer2_count =0;! L* `4 \# E% a% Z! i* Y
    //LED3=~LED3;/ ^8 b7 R# _/ @" f$ @" Y7 e% ^* U
    }
7 c6 d- f6 ^" j! N% m" @8 T9 Z}; b8 t1 f' J$ v: y* }
/ \6 k7 J/ w+ |1 @4 O0 |
指定中断服务函数地址
0 j5 A5 m. A: d) U  ~% @8 D/ z     EALLOW;  //  protected registers9 a# ~7 m  U3 b6 h
    PieVectTable.XINT1 = &ISRExint1;  //外部中断1服务程序
: W1 i1 `1 o: y% ~    PieVectTable.TINT0 = &ISRTimer0;   //定时器0中断服务
! F" u0 N/ a3 Q! ~- u+ V6 M    PieVectTable.XINT13 = &ISRTimer1;   //定时器1中断服务+ R7 I% q) ~9 Q6 i9 ?
    PieVectTable.TINT2  =  &ISRTimer2;    //定时器2中断服务; c+ B# s. k, u- Q
    EDIS;    // This is needed to disable write to EALLOW protected registers
5 C5 ^0 W1 b3 W& L: @/ v8 a" c/ \
; u( {: n0 T0 q) u9 V开CPU级中断# ^( I: `  K! D! Q
    IER |= M_INT1;    //开启CPU中断 组1
: d$ ?5 G+ p( T" \6 b6 J    IER |= M_INT13;   //开启CPU中断 13   XINT13 / CPU-Timer1  H1 V+ e, E) K* q
    IER |= M_INT14;   //开启CPU中断 组14 TINT2$ n: v9 p$ a( o+ _3 z6 s8 A, h
    * b, o' M( s# \0 a1 K6 N
    PieCtrlRegs.PIEIER1.bit.INTx7= 1;  //CPU定时器 TIMER0中断   组1的第4个中断使能
- d6 q: p0 A9 A6 p    CpuTimer1Regs.TCR.all = 0x4001; // 使能TIMER1 Use write-only instruction to set TSS bit = 08 d  h8 S; x& `$ b
    CpuTimer2Regs.TCR.all = 0x4001; // 使能TIMER2 Use write-only instruction to set TSS bit = 0/ Q1 N: ?3 B6 N+ ^( G$ ?

2 B, r, i5 m' \- y7 [9 F    EINT;   //开启全局中断
" D: E3 \" ~; Y9 }    ERTM;   //开启全局实时中断,调试用DBGM

该用户从未签到

2#
发表于 2016-6-29 09:53 | 只看该作者
资源多,学习不止步& Y. l( @! \: n) ]/ a2 U3 ]

该用户从未签到

3#
发表于 2016-6-29 10:08 | 只看该作者
必须赞一个~
6 k! _# h' R% Y0 l& m
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-6 14:53 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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