找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 211|回复: 2
打印 上一主题 下一主题

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

[复制链接]

156

主题

503

帖子

1186

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

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

EDA365欢迎您!

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

x
外部中断初始化
0 \5 {7 b! S/ P#include "extint.h"* J$ R$ x; [: R4 [
//按键和外部中断都用了GPIO13,查询和中断不能同时使用
3 \8 F5 Z: C! ~& Nvoid InitExtInt(void)
7 f9 S$ D2 C' p1 Q! R. _{0 `, l2 W$ U  j* r* w
     EALLOW;
( ?$ W' c4 |5 N  _( \     GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 0;
$ f, g1 u7 g, h# K; {5 v2 a) A     GpioCtrlRegs.GPADIR.bit.GPIO13 = 0;           //作为输入IO口4 U4 p& F+ {0 C0 p
GpioCtrlRegs.GPAQSEL1.bit.GPIO13= 0;          //和时钟同步$ ^+ U# c8 n7 \3 A$ ^- x# {
     GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 13;    //选择GPIO13为外部输入XINT1输入引脚2 s6 V# g% i2 \: v
XIntruptRegs.XINT1CR.bit.POLARITY= 0;         //下降沿触发中断% A! i6 m" J/ Q* ]
XIntruptRegs.XINT1CR.bit.ENABLE = 1;          //使能XINT1中断. I& K: Z" J+ e. C5 g9 X; f8 U. N- `
EDIS;
& z7 J8 M, v7 Y9 D}
8 t7 s: h6 T# u: N7 p7 @: o
: G2 g+ \4 Q  ~3 e; M//外部中断1服务函数  ,按下按键,进中断,亮灯响鸣
7 B- d0 K, J/ j. P  ?2 [' H# u$ E' uinterrupt void ISRExint1(void)
2 Z8 b/ I; ^) K" E" T1 M, ^  B{
' D% v7 G& A7 [8 U$ V! `        PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
8 J& L8 w8 |. I) NDELAY_US(1000);
" x! M2 j" r! k1 H1 Mif(GpioDataRegs.GPADAT.bit.GPIO13 == 0)3 _' X% e" P& C8 i! C
{2 L# K) A% V' {# s9 D. o2 W, t
    LED4=~LED4;
3 Y* r* H/ Y+ f0 i6 k7 p2 R3 Q) X    BUZZ_ON
0 Y+ X+ G: x: m5 s3 S4 q. f    DELAY_US(100000);
# q7 h# m$ ^% M, Y& V    BUZZ_OFF
) v0 O& W2 t$ E% u. f      DELAY_US(100000);3 [$ T: P) A8 y1 K; d; N
    BUZZ_ON5 S8 e' V% `' m- P% @8 P4 P3 G- N
    DELAY_US(100000);
; {+ s* w6 J# H/ h( \0 T  Q/ g    BUZZ_OFF
2 }# ~2 B0 e* _1 b% _6 l" q    }
# E+ s' l' q! n8 g: u2 ~- G6 H}+ c0 e4 u, D2 ?6 r/ l0 t. M" _

1 i, O* a# t+ K
; Q2 I; _. l% o$ P) t定时器0,1,2中断初始化
, L( D6 ~2 J$ z8 h    InitCpuTimers();   // For this example, only initialize the Cpu Timers/ T9 p3 _# ?' w7 z( A% e  [
    ConfigCpuTimer(&CpuTimer0, 150, 500000);  // 500us 150MHz CPU Freq, 1 second Period (in uSeconds)$ ^7 }1 s& e0 t7 d: e' B8 Q
    ConfigCpuTimer(&CpuTimer1, 150, 1000000);
" n6 s$ c1 J. v4 i    ConfigCpuTimer(&CpuTimer2, 150, 3000000);: R9 w' V' ^; X* ?3 ^9 I/ ^5 Y; x
    StartCpuTimer0();
' d. q) V* _( S9 L% r3 ?    StartCpuTimer1();/ T/ t6 M2 r! G4 T2 f: c
    StartCpuTimer2();
6 L, p+ j+ f- {9 b
; O6 @& O+ {; p' g2 _  Y- }1 S& l0 H. u  z0 f) o) e
#include "timer.h"
* _8 u9 C7 p/ f. f# Linterrupt void ISRTimer0(void)
+ y6 s* P5 I) o{+ s, p; n/ Z. |
    static u8 timer0_count=0;9 U0 @4 v2 v. l* K* g2 r) q
// Acknowledge this interrupt to receive more interrupts from group 1, F% o- ]0 I4 d% {) N( o
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; //0x0001赋给12组中断ACKnowledge寄存器,对其全部清除,不接受其他中断5 T2 z8 t( F' K5 z& {
    CpuTimer0Regs.TCR.bit.TIF=1; // 定时到了指定时间,标志位置位,清除标志" z/ B7 A; G" `9 Z% v
    CpuTimer0Regs.TCR.bit.TRB=1;  // 重载Timer0的定时数据
7 Y4 `$ U( z: G. t7 O# C
  i5 r6 h% G/ e4 J) Z4 n2 T/ y5 D    timer0_count++;
1 W0 W/ W2 s# i  K6 S    if(timer0_count==4)  //2000ms =2s
5 R! R$ B. {% t6 |  K    {$ B+ N0 I/ D% i$ Q
    timer0_count =0;
  v$ O9 v* t7 }' Y  z    LED1=~LED1;$ P/ G; o% _, x& H, H" l
    }+ W! ~$ n- s7 |$ H7 z% P
}
$ v6 ]' j- H; F3 X1 E% n$ ]6 ]1 a% k& `: C, i
. {: E. }+ n4 O* [' ]
//1s+ ^" Q: J+ ^) W
interrupt void ISRTimer1(void)2 p3 N/ P5 ?# _" M& P+ [
{( R7 D/ o( O( S& I
    static u8 timer1_count=0;
. C, t, S" A$ p3 t; z// Acknowledge this interrupt to receive more interrupts from group 1) i1 G/ e# T2 E3 n
    //PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; //0x0001赋给12组中断ACKnowledge寄存器,对其全部清除,不接受其他中断
6 G% P2 x5 V& U- u" b    CpuTimer1Regs.TCR.bit.TIF=1; // 定时到了指定时间,标志位置位,清除标志
1 n, S0 W8 s+ Q) ~# ?1 ^) r2 A; p) |    CpuTimer1Regs.TCR.bit.TRB=1;  // 重载Timer0的定时数据
# z4 s" R" q% K" i6 m
) d/ j. |, n- y6 M- R    timer1_count++;; w3 n4 P, n  {/ K! z
    if(timer1_count==1)/ b5 \" q- Z& n' j) u& Y9 x( o: J
    {
8 c- _! y. }' U. h    timer1_count =0;
  h" I# S6 P4 F$ k    LED2=~LED2;/ [5 R6 S* C0 P4 I4 ~
    }
( {8 L' c: V9 ?! o}
& P  o% Z# P4 \% k
6 k" t' [2 y9 s$ q3 M//3s" w0 l- c6 v. P: T/ T4 J
interrupt void ISRTimer2(void)6 B8 w4 c3 ~# L# J$ E& d
{+ H/ d! c1 l  X6 [
    static u8 timer2_count=0;
5 z3 e7 v1 N* C/ K// Acknowledge this interrupt to receive more interrupts from group 1
; F$ K( V% X# l    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; //0x0001赋给12组中断ACKnowledge寄存器,对其全部清除,不接受其他中断/ g! `! q2 M; }3 \' @' |7 H
    CpuTimer2Regs.TCR.bit.TIF=1; // 定时到了指定时间,标志位置位,清除标志
& ]3 A1 _- J; X) F3 o$ t    CpuTimer2Regs.TCR.bit.TRB=1;  // 重载Timer0的定时数据
5 u; B( P" L9 m
4 ^5 I7 o3 F: u    timer2_count++;
5 l, P3 l% v! P* f    if(timer2_count==1)0 p1 D, W) A( S+ r7 |" [( v) ]7 u
    {
1 N& ^! n; q8 L) b- O1 M    timer2_count =0;; n' y6 r8 O  J! r  Z! a
    //LED3=~LED3;; j' F6 ]$ C2 L
    }! R6 u' q# v. [
}
2 a7 a; `/ W( A; S7 x: ~: B/ |$ ^: Y, s- V
指定中断服务函数地址
" C2 Z$ _& n; I/ D& l     EALLOW;  //  protected registers
" a+ z1 D" U6 X! S: B    PieVectTable.XINT1 = &ISRExint1;  //外部中断1服务程序
$ G: B. F9 `4 k; J. D; j    PieVectTable.TINT0 = &ISRTimer0;   //定时器0中断服务5 B& z" J6 {$ K* P1 H3 t, ?) z
    PieVectTable.XINT13 = &ISRTimer1;   //定时器1中断服务; Y2 f  g9 ~2 `1 j
    PieVectTable.TINT2  =  &ISRTimer2;    //定时器2中断服务) V5 ]$ O# i* ]: S9 b( k
    EDIS;    // This is needed to disable write to EALLOW protected registers; n6 H0 Q9 T5 U0 A: |4 y$ d
( |( w' _2 x, i" S2 {* g8 L
开CPU级中断# w0 Z% v/ X7 s& y4 \' A
    IER |= M_INT1;    //开启CPU中断 组1
, ^3 M0 s- F7 c3 r) N5 @' L    IER |= M_INT13;   //开启CPU中断 13   XINT13 / CPU-Timer1
  ~- }& w/ ?( Y5 L& I2 `    IER |= M_INT14;   //开启CPU中断 组14 TINT2& Q  A( `5 }3 y# o
   
2 Y5 J8 t" Q6 A0 O  n* u    PieCtrlRegs.PIEIER1.bit.INTx7= 1;  //CPU定时器 TIMER0中断   组1的第4个中断使能
# a# G& _- A  Z9 K    CpuTimer1Regs.TCR.all = 0x4001; // 使能TIMER1 Use write-only instruction to set TSS bit = 0! n" j& g" a1 ]9 }2 M  a- {
    CpuTimer2Regs.TCR.all = 0x4001; // 使能TIMER2 Use write-only instruction to set TSS bit = 0) J8 e; [4 t, u& E

; r5 W5 W7 {6 G7 k    EINT;   //开启全局中断/ M  |# A" G, R- O2 ?, p, q0 E
    ERTM;   //开启全局实时中断,调试用DBGM
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

155

主题

662

帖子

1191

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1191
2#
发表于 2016-6-29 09:53 | 只看该作者
资源多,学习不止步1 r# I9 w4 [+ N- ^

160

主题

620

帖子

1233

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

积分
1233
3#
发表于 2016-6-29 10:08 | 只看该作者
必须赞一个~+ B8 k0 I2 J# [" @5 J6 i
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2025-6-3 21:03 , Processed in 0.056906 second(s), 31 queries , Gzip On.

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

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

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