一乐电子

一乐电子百科

 找回密码
 立即注册

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 1122|回复: 3
收起左侧

Microblaze Timer计数中断

[复制链接]

版主

Rank: 7Rank: 7Rank: 7

主题
276
帖子
1366
一乐金币
5111
精华
0
阅读权限
200
注册时间
2008-11-22
最后登录
2020-5-16
发表于 2019-10-6 16:45 | 显示全部楼层 |阅读模式
本帖最后由 kenson 于 2019-10-6 17:12 编辑
! X& R" @3 U  `7 x
5 @6 |# U6 U. y% Z' E& p2 D' U#include <stdio.h>( L' w1 D& }4 c! Q( ?
#include "platform.h"! {4 V+ _$ M. e9 ^
#include "xparameters.h"
  d5 R4 J) d- J9 O$ Y4 I#include "xgpio.h"
, I$ V' c$ T& A( c) o, M' @#include "xintc.h"! m% ^4 K6 ?! ?' }
#include "xtmrctr.h"- X* t5 o7 f7 A2 e% ?. l+ X
#include "xil_exception.h"% ]6 U* T7 l; v' c% ]1 |

+ O0 G& T3 k3 F1 {, O2 ^+ H#define CH1 1
1 X+ j+ X5 ~' K) J! P. B* R' i' U; I
XGpio LED;
- I# f8 f  s" ZXGpio SW;' X# S( ^- a4 ^0 U; A% @
XGpio KEY;: `+ a# q- A2 Z8 L
XIntc Intc;5 `& \: M* e2 S3 \" C

! E* l; G8 U: C4 y1 X5 s- ]u8 count;
% z6 d& ]3 d, V* Y/ n  f6 p. R. i- k9 Y: q% I. y6 m

0 A% Y! u" S7 L' e8 N8 |/************************** interrupt handler process****************************/
; y% v* Y2 O6 `- Xvoid timer_int_handler(void *CallBackRef), }7 `! p" V( r. Y! _- J
{6 ^  x4 R+ ^8 }6 N0 e
  unsigned int csr;
2 P+ @# A3 a3 o) ]  csr = XTmrCtr_GetControlStatusReg(XPAR_AXI_TIMER_0_BASEADDR,0); // read control/status register
) a) b" F, T* P) S9 G0 P) Y0 ^  if(csr &XTC_CSR_INT_OCCURED_MASK)count++;
; `+ t6 t  L! M6 S# z! O. q0 c$ n  L* c
  XTmrCtr_SetControlStatusReg(XPAR_AXI_TIMER_0_BASEADDR,0, csr); //clear interrupt indication
/ [! D# {. H5 x$ J: @) v}
- a* ?. ?3 Y$ R8 B/ X1 D$ K
0 w* w' F5 c0 k! X5 r6 C/ g  g" B! q# {8 x+ i" J
. r  @' q* u, s: G/ \
$ [3 I& N3 D! B/ o
void SwHandler(void *CallbackRef)! h* Y5 ~- x9 k+ |+ b# N
{
8 J/ X0 G6 b  x: W; V3 P5 K7 A
% z; Z' o6 u2 Q3 V; @" K; v    XGpio *GpioPtr = (XGpio *)CallbackRef;1 @% ?: l4 k1 Z
    xil_printf("Switch Interrupt!\r\n");8 L6 H, |, \: E1 u
    // Clear the Interrupt! E/ J: a& T! g3 w& s3 b
    XGpio_InterruptClear(GpioPtr, 1);
% f  F; l. w5 l+ H* Y9 I. T: W+ s* |1 m
}0 l8 \+ M& V, v0 n
0 j5 C# |" \) M+ U. q/ _
* O, G5 ~! e4 i! m( z: T
void KeyHandler(void *CallbackRef)
+ R6 s; B5 A% h9 A9 G{, |( R% I5 C! Q: n* |. f# D* t
1 f& p! ?: w8 a* C# z9 W, S( r
/ x: M  X* }! \7 E8 k
    XGpio *GpioPtr = (XGpio *)CallbackRef;$ `: ~3 ?( E& i" P5 n! [( F
    xil_printf("Push_Button Interrupt!\r\n");
- D/ u) ?; J" C- @$ y+ C: z0 A    // Clear the Interrupt; V2 _4 {: D& [2 e% D5 `
    XGpio_InterruptClear(GpioPtr, 1);
( `, A! `& M5 C$ H1 f9 E
+ B6 g- r& x6 r5 ^: u( r  S}6 A+ h4 S; I1 b' ]. h& k
  O" e3 L1 d5 b. P2 t5 u

. o: F' R' _2 L
* Q$ y/ Y# ]7 k# w; l+ l, ^4 F, ?
# S) H. A$ O' B9 H6 M2 b! O
3 n; n" M7 c/ h2 [) ~+ |7 }% bvoid print(char *str);
3 t5 J) z: V  L7 P, }( |4 `/ U. D  s( M4 o/ P5 l- B$ ]
int main()
; b+ {5 V7 C" I4 A{
# O5 V" k* D* G" Z+ G2 ^    init_platform();0 K2 U' _4 X" ^3 E, Q+ M
( z' D& C& H! I" K1 ]; I
    XGpio_Initialize(&LED, XPAR_LEDS_DEVICE_ID);: Q! [! a5 {9 ~
    XGpio_Initialize(&SW,  XPAR_DIP_SWITCHES_DEVICE_ID);" R2 D$ R0 |1 m8 i) c
    XGpio_Initialize(&KEY, XPAR_PUSH_BUTTONS_DEVICE_ID);
3 T& w/ P0 Y! f+ j9 `, [/ y0 H' i- L
    XGpio_SetDataDirection(&LED, CH1, 0);
( m8 `- |: W4 F0 ^. [3 d" n    XGpio_SetDataDirection(&SW,  CH1, 1);; a4 T7 n$ W( E! G3 P$ N3 T
    XGpio_SetDataDirection(&KEY, CH1, 1);/ S+ R: I& J: T% m( H

4 J" u2 G9 E3 L/ ?3 d/ J) ?# |7 t    XGpio_DiscreteWrite(&LED, CH1, 0xff);  //all clear LEDS to off6 l) `1 \; S" N5 g4 J

" I8 c' I, g3 E& c0 I. e- L7 y    XIntc_Initialize(&Intc, XPAR_INTC_0_DEVICE_ID);6 `- T# I8 C! O

# R! M& U/ C) |1 }+ m9 a! ~. T    XIntc_Connect(&Intc, XPAR_MICROBLAZE_0_INTC_DIP_SWITCHES_IP2INTC_IRPT_INTR,
7 }, K9 ]" S7 U) M                          (XInterruptHandler)SwHandler,2 _, h: \3 {% e/ v/ w4 Z
                          (void *)&SW);
, C" {- U# c. E& I5 y
) p; d* C' o$ X& E6 [  H, J    XIntc_Connect(&Intc, XPAR_MICROBLAZE_0_INTC_PUSH_BUTTONS_IP2INTC_IRPT_INTR,
4 ?. J1 L( Q; U# X) X& X                          (XInterruptHandler)KeyHandler,) J9 C! C- D/ L
                          (void *)&KEY);
' Y, }# L  e2 p  k# M6 n
) E7 g  B( u6 A( `$ c3 |9 r. V- K* [
    XIntc_RegisterHandler(XPAR_INTC_0_BASEADDR, //register timer0 interrupt and handler process
  ^2 x% y8 I, c/ n                                  XPAR_MICROBLAZE_0_INTC_AXI_TIMER_0_INTERRUPT_INTR,6 f, v0 J$ `/ n
                         (XInterruptHandler) timer_int_handler,8 R' N9 ]* _" f$ l# _& ~
                         (void *)XPAR_AXI_TIMER_0_BASEADDR);
8 n; j% s6 a# k5 @$ Z' n3 f. ]( K8 q4 u, S8 X. E; v
    XTmrCtr_SetLoadReg(XPAR_AXI_TIMER_0_BASEADDR,0,50000000);$ \/ f1 }/ l1 K+ ?8 J+ o/ Q( u
    XTmrCtr_EnableIntr(XPAR_AXI_TIMER_0_BASEADDR, 0);
( x8 L9 S3 I2 E+ l: B  M
* F: K* R; b' w' j4 ~    XTmrCtr_SetControlStatusReg(XPAR_AXI_TIMER_0_BASEADDR, 0,
0 [$ D$ J" Q0 X6 {7 Y7 A1 e1 e1 P                                XTC_CSR_ENABLE_TMR_MASK |; c; c- J6 a2 @2 q( f; Z( M0 t: N
                                XTC_CSR_ENABLE_INT_MASK |  ~/ [5 |0 r) j' Q& S- B! J
                                XTC_CSR_AUTO_RELOAD_MASK |
  O/ N" r7 s$ Z: L$ k                                XTC_CSR_DOWN_COUNT_MASK);
" y1 ~" R3 b4 D9 B4 U* C4 }! t( T  ^/ z! y& g* S# z

5 J* y4 |+ K$ g3 d. ]    XIntc_Start(&Intc, XIN_REAL_MODE); //set MER  enable IRQ to CPU0 l0 \1 l$ h, k+ k; s1 m

; S7 p- a. E$ g3 h- F' r: z( M    XIntc_Enable(&Intc, XPAR_INTC_0_GPIO_2_VEC_ID); //set IER for push_buttons enable interrupt
* z0 M  J" B  j7 o/ }8 p7 r, i    XIntc_Enable(&Intc, XPAR_INTC_0_GPIO_0_VEC_ID); //set IER for switches enable interrupt
  x/ M* U4 e" J7 @
( d. w. t8 d" z% ^  j6 Y# a    Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT,
# _- r/ i& s+ y5 X! B                (Xil_ExceptionHandler)XIntc_InterruptHandler,
/ c. T! M) w  Y3 k* _7 R                &Intc);; l# k, O/ D' D6 ]; F3 Z: Y
; b, T. H$ u4 W' U$ T* m1 V1 `
    Xil_ExceptionEnable();+ g7 `! y8 x3 U) r

) f/ f  j7 w) s+ t    XGpio_InterruptEnable(&KEY, CH1);. n- ]8 ?& o, T- B
    XGpio_InterruptGlobalEnable(&KEY);+ H3 x5 x% I% t3 f8 y& ]$ Y
! a8 a6 s& C* _" G+ |
    XGpio_InterruptEnable(&SW, CH1);
% \, A3 L+ B, q) e; x* W5 {! |+ b    XGpio_InterruptGlobalEnable(&SW);1 a1 C9 }1 X  O

( U9 Q* U  @8 \& h: `, O) t    print("Hello World\n\r");1 D. P% ~0 b& z3 E* d
" |# ^' Z4 _" N3 e- s, A9 Q

3 S) k5 U! u0 }1 M$ X1 t    while(1)
/ u1 h& k  }- o7 }$ A9 L8 p3 I    {
1 Y4 ?4 s! g, `8 u8 ~2 {8 b
6 q5 F/ Q- P* _/ i' X% C( u
7 K! u4 z& v' x2 b, ]$ U7 V
# h3 ^' N+ n) H- E: N. Z    }
8 w% n9 h* O" b4 p6 i0 Y/ w: a1 y
2 z# \& Z) C8 @) X) h/ Z5 W$ f. d- M6 ^: p! [
    return 0;
0 M- v0 m& c2 c. T. ?' i}
! `1 H  G  r; U0 ]0 w/ H# S% {  G0 b4 k& W
这个模式直接操作地址比建立一个实体来操作会快好多
! o  V* s) R7 Z. M) l
% N8 [7 P8 p2 x1 P4 V3 v

版主

Rank: 7Rank: 7Rank: 7

主题
276
帖子
1366
一乐金币
5111
精华
0
阅读权限
200
注册时间
2008-11-22
最后登录
2020-5-16
 楼主| 发表于 2019-10-6 16:47 | 显示全部楼层
因为CPU时钟为100MHZ所以计数器要达到50000000  5千万才能有1秒左右的计数

版主

Rank: 7Rank: 7Rank: 7

主题
276
帖子
1366
一乐金币
5111
精华
0
阅读权限
200
注册时间
2008-11-22
最后登录
2020-5-16
 楼主| 发表于 2019-10-6 16:49 | 显示全部楼层
microblaze_enable_interrupts();
6 @* N- }5 A( M7 D+ `3 q* M代替
3 N8 k) m& B, D2 B" `+ Q0 E& e    Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT,' \! U5 W' {# {4 n  W5 a) d5 N) @$ o
                (Xil_ExceptionHandler)XIntc_InterruptHandler,
# l. l7 @. U* J" b, q3 _                &Intc);
. a3 }6 J- V+ `7 G/ q: U# L6 {) v: o- W4 @  E9 n
    Xil_ExceptionEnable();

版主

Rank: 7Rank: 7Rank: 7

主题
276
帖子
1366
一乐金币
5111
精华
0
阅读权限
200
注册时间
2008-11-22
最后登录
2020-5-16
 楼主| 发表于 2019-10-6 17:20 | 显示全部楼层
xilinx 的microblaze 有两个TIME 一个是time0 和 time1 它是靠, l. [2 ~/ ]4 I
XTmrCtr_Config XTmrCtr_ConfigTable[]=8 u/ @* |  |  ]# k( S) |
{
) k2 Q! l: ~$ T0 d! k0 m6 Y {1 p! E/ l" U) n+ ?" G/ I2 p4 P" o# y
  XPAR_AXI_TIMER_0_DIVEICE_ID,
  B, y" T* }# |/ I  XPAR_AXI_TIMER_0_BASSADDR& z% u( j; y7 ~! L
},8 b9 P$ d8 [# Z
{& D0 h2 B3 I+ I) W/ B
   XPAR_AXI_TIMER_1_DIVEICE_ID,   //如果硬件enable 了两个就会有两个初始化的数组,
( E5 a3 k7 a( Z, k8 B% j   XPAR_AXI_TIMER_1_BASSADDR     //如果只有一个那么只有上面一个数组了6 |# I+ A8 p2 l
}! C6 j" l3 L" \5 T- H
};
, P+ c6 `0 i1 h1 T+ u! R5 G: f3 [
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号-1粤公网安备44522102000183号 )

GMT+8, 2020-5-30 15:20 , Processed in 0.051746 second(s), 31 queries , Gzip On.

Powered by yleee

© 2008-2020 一乐电子

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