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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
外部中断初始化: M4 \& I# w9 z* V4 w
#include "extint.h"
7 v( R8 V; N- q+ j//按键和外部中断都用了GPIO13,查询和中断不能同时使用% c1 z  k- g7 X4 z9 T; H0 R8 p3 W0 B+ ^
void InitExtInt(void)
$ K, {* M9 z9 A+ s  f2 G* j{
  C+ T2 V9 e! U3 f- u6 X# Q     EALLOW;& N: G% q4 C* Y) f; G0 \/ B+ f/ b
     GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 0;9 |+ d& j5 ^/ h% s" t8 y% q
     GpioCtrlRegs.GPADIR.bit.GPIO13 = 0;           //作为输入IO口
+ l, H1 W' C6 {$ cGpioCtrlRegs.GPAQSEL1.bit.GPIO13= 0;          //和时钟同步
& Z7 ^" `: ?8 v. v3 ^7 g; f6 I     GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 13;    //选择GPIO13为外部输入XINT1输入引脚
5 @) c. L( b; e# TXIntruptRegs.XINT1CR.bit.POLARITY= 0;         //下降沿触发中断
. B; ?( F" [$ h9 CXIntruptRegs.XINT1CR.bit.ENABLE = 1;          //使能XINT1中断' Z! y- r" ]7 F% b
EDIS;  E8 J0 [! |( \7 O% e
}5 |# \8 x- r- I0 V* g  ?" `# ^. F$ G9 c
$ E! v+ y9 q- c6 T
//外部中断1服务函数  ,按下按键,进中断,亮灯响鸣: I3 t- R* ~4 ~" h; s' D
interrupt void ISRExint1(void)6 P) O# ~1 K- @% E
{
2 _  [5 S' @: C9 H' d( u% |        PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;/ }( I7 J( T  G& _. h  k9 ~
DELAY_US(1000);  w$ s- y" c. U. T' m( k/ c" ~1 ]6 ^5 {
if(GpioDataRegs.GPADAT.bit.GPIO13 == 0)
0 {: u( [$ i; r& y{
+ g8 p, j& K: ]! C    LED4=~LED4;
, Q& o2 m7 ~! m; o. |5 y    BUZZ_ON" E! a1 Q1 x) W% B
    DELAY_US(100000);' L* _7 l( q+ @6 @
    BUZZ_OFF
! O& e6 e; M' v( r0 v      DELAY_US(100000);
7 c4 [' w2 m0 t0 m    BUZZ_ON0 r6 {" @& J! m* s2 v4 t; v) K& B
    DELAY_US(100000);
0 G0 E. A  V0 T2 D4 d+ X    BUZZ_OFF- G1 N; @& @2 w: \( R
    }+ }& [9 P: P  ^8 b: X
}7 }% O5 f8 X3 R# W7 F' _% D

5 \" }  g1 r4 g9 @" x1 f
3 ]* ?) O$ g2 O9 N定时器0,1,2中断初始化7 k; J  ]' B+ y; \) S0 N& J5 ^/ a' L
    InitCpuTimers();   // For this example, only initialize the Cpu Timers7 S- v! m" ~& w. D$ s0 _
    ConfigCpuTimer(&CpuTimer0, 150, 500000);  // 500us 150MHz CPU Freq, 1 second Period (in uSeconds)
, Q/ [/ R( t7 L) U  ]& K    ConfigCpuTimer(&CpuTimer1, 150, 1000000);
$ V# L+ d8 v: h" o$ j" a! V    ConfigCpuTimer(&CpuTimer2, 150, 3000000);8 x$ ]. P2 r3 s1 \
    StartCpuTimer0();
$ l' q& C3 I+ S' w, s    StartCpuTimer1();# y5 `/ s0 u0 g# r7 P' J7 N
    StartCpuTimer2();! `* L- p5 b5 I
/ y1 y' E" |; K- K& Z0 J- ?
* _, v, S8 i8 E1 L$ G
#include "timer.h"
) h8 i" B) I4 M* b, \& ninterrupt void ISRTimer0(void)
& S4 `: q, R2 }1 v  x{: u1 @, K! D! j  t
    static u8 timer0_count=0;
( V5 D3 D; b% F' H; M// Acknowledge this interrupt to receive more interrupts from group 1. y0 f! T- Z  I. Y8 w" A$ z
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; //0x0001赋给12组中断ACKnowledge寄存器,对其全部清除,不接受其他中断
* E! g% \. v  H* o    CpuTimer0Regs.TCR.bit.TIF=1; // 定时到了指定时间,标志位置位,清除标志3 z/ t9 {8 j' }9 G6 @# [
    CpuTimer0Regs.TCR.bit.TRB=1;  // 重载Timer0的定时数据# O+ T7 V3 S5 o/ e

8 \. |4 z/ C; |, ?    timer0_count++;. n6 r# p7 V$ E7 p. [5 \* Z4 \
    if(timer0_count==4)  //2000ms =2s8 v7 {5 p, p1 R+ ~" b
    {
1 A! t3 {1 C% ?( A6 y. m    timer0_count =0;% L) E0 ~5 _6 x( ~! u  x- I' [
    LED1=~LED1;
) Q( ?, y- \/ {" V+ q0 s3 |    }
. G4 O4 m& G1 b! j+ B, c}  y- D  j; T# q4 l& {
( u- f7 S" Y5 B% Y  G/ J( |

5 s. \9 C. `8 J2 K//1s
2 U8 ?; g/ V3 Q8 C) E( \+ Zinterrupt void ISRTimer1(void)9 x4 e2 @6 s/ s. U4 h" R3 f
{/ N' e7 N: r! u0 x7 [* t
    static u8 timer1_count=0;
6 ~( w. \/ l& {  r# I) @. V// Acknowledge this interrupt to receive more interrupts from group 1% V" p/ \8 j" [3 y
    //PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; //0x0001赋给12组中断ACKnowledge寄存器,对其全部清除,不接受其他中断
. a7 p, t4 u& H( U3 J    CpuTimer1Regs.TCR.bit.TIF=1; // 定时到了指定时间,标志位置位,清除标志
1 y; X9 s8 B0 {' Z$ ?& k3 s' N& y    CpuTimer1Regs.TCR.bit.TRB=1;  // 重载Timer0的定时数据
6 F: a) s9 B, w; ?1 X( f3 \2 Z* e, O4 b# P9 ~
    timer1_count++;
( S6 d4 T6 [0 t, T2 L& x' s    if(timer1_count==1)
: U+ i' o1 G- ]/ X    {
- ]# Q/ ], n9 ^7 T. b& q    timer1_count =0;! q( ]* b3 t& _' A* y
    LED2=~LED2;9 M. ]( b; g: [
    }
7 M3 _3 u: I8 ?* {& i. V/ m}
* Y; c" T; }) W- o/ n4 L. u& k+ W9 @
; @1 i1 ]2 V& u% _0 r* W2 Q//3s% y: @4 B( E! F, Q2 {: p8 n" d
interrupt void ISRTimer2(void)6 F( @7 C3 e9 a2 G4 d1 B9 Z4 S( e
{6 m1 f) S" K+ J, n
    static u8 timer2_count=0;( u+ q% i) H& K& a. f. J' b
// Acknowledge this interrupt to receive more interrupts from group 1- c; l4 H  x7 f
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; //0x0001赋给12组中断ACKnowledge寄存器,对其全部清除,不接受其他中断7 x' H% e: B% k% v) U0 A: V. u3 P
    CpuTimer2Regs.TCR.bit.TIF=1; // 定时到了指定时间,标志位置位,清除标志
' N7 s. ^* A4 i1 @* S    CpuTimer2Regs.TCR.bit.TRB=1;  // 重载Timer0的定时数据
0 F# p2 }# e; t% ~' ~# J) p+ c( ~8 V& y9 e* A, b% X
    timer2_count++;
) S& `+ p- `. R0 a: Q7 S1 @    if(timer2_count==1)
# \% }: u$ K  L    {8 y! n3 B+ W6 I0 K! H4 J
    timer2_count =0;- a; a; K) Q9 K- P5 E8 ]
    //LED3=~LED3;
& k/ B* y8 [6 K  |5 S9 Q    }
5 N3 G0 |. Z9 K8 b  q6 P% Y}1 `! d* [; N# @( W: V4 W! z

; e/ R+ d( `, l% t  N- w: ]指定中断服务函数地址
$ l, ?2 a4 g  T' S/ M, b* b- p     EALLOW;  //  protected registers
1 x+ }) j; t0 g4 d* g9 {. N4 h    PieVectTable.XINT1 = &ISRExint1;  //外部中断1服务程序
1 B! t, z' V$ K2 l' z, ?    PieVectTable.TINT0 = &ISRTimer0;   //定时器0中断服务3 R: r' f+ o' V4 ?2 K9 |
    PieVectTable.XINT13 = &ISRTimer1;   //定时器1中断服务8 Z5 n; j$ t" k/ O, m# K
    PieVectTable.TINT2  =  &ISRTimer2;    //定时器2中断服务+ t5 p! W5 \: b- q7 B
    EDIS;    // This is needed to disable write to EALLOW protected registers
8 ~* x2 a. [5 v' E2 t$ g
9 R0 C) \) C+ G+ ^) k开CPU级中断( I, l3 N- a$ r7 g& o2 a
    IER |= M_INT1;    //开启CPU中断 组1
5 `; ?1 ^1 x( H& C    IER |= M_INT13;   //开启CPU中断 13   XINT13 / CPU-Timer1* O+ N9 Z- u' Z7 S8 @
    IER |= M_INT14;   //开启CPU中断 组14 TINT2
3 P" g% F! L2 K" Q! m0 F& K' t   
7 {5 S7 u5 ~" s' j& H/ l    PieCtrlRegs.PIEIER1.bit.INTx7= 1;  //CPU定时器 TIMER0中断   组1的第4个中断使能
& `% B3 t( T+ U! Q$ e& ~( M* O( G9 }    CpuTimer1Regs.TCR.all = 0x4001; // 使能TIMER1 Use write-only instruction to set TSS bit = 0
8 D$ K1 s' k3 q# L0 U. h    CpuTimer2Regs.TCR.all = 0x4001; // 使能TIMER2 Use write-only instruction to set TSS bit = 04 d" Q" g. v7 J
* Q/ B- {# H& h; D4 R9 w; _9 ^7 H( L
    EINT;   //开启全局中断
4 X0 p% R/ E, P+ q* L# r* {    ERTM;   //开启全局实时中断,调试用DBGM

该用户从未签到

2#
发表于 2016-6-29 09:53 | 只看该作者
资源多,学习不止步
7 h5 {; [5 n& l

该用户从未签到

3#
发表于 2016-6-29 10:08 | 只看该作者
必须赞一个~3 S# ]9 o& w6 f" |7 x- k
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-4 19:19 , Processed in 0.062500 second(s), 23 queries , Gzip On.

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

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

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