C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5078|回复: 1
打印 上一主题 下一主题

C6747利用McASP发送中断方式完成音频输入信号的直接输出

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:; y) ?! x. O; M* Y
main文件:- q* P1 o- f& {
interrupt void interrupt4(void)  1 y' t! q6 ?% v# T# h
{: q; E! U* ]8 R7 l, r8 Y7 A5 E
  Uint32 sample;
# S9 j+ _' A1 {) ^0 _1 Y3 p: D  \
  sample = input_sample(); // read L + R samples from ADC
2 T/ N, C5 Z) U: H% K9 A- X  output_sample(sample);   // write L + R samples to DAC
0 j+ n; z) g3 R# z6 Q6 G5 a6 m$ v  return;
1 B* ^3 @- X) W/ p2 a! J}
( \8 U9 f1 m$ W3 F
7 \$ W- F3 g" B# uint main( void )+ a* k  Q, f4 n8 E: v# n" n
{" [5 H1 [1 q/ l& Z1 o
* M- i5 ~8 q) {! A5 ?* h& D6 F7 ?
    /* Initialize BSL */5 N2 q" y2 y$ c
    EVMC6747_init( );
: P- s+ G% p6 D) f- z2 W. Z% q* g# m) i* K        /* Call evmc6747_intr function */
, f1 m+ ~# a9 d/ Z3 M1 h3 G    aic3106_init( );+ S. ^: a) [9 d% i4 c
        while(1);
* `) s3 A8 d' a4 Q. u/ e}
% J) k' i* u+ e3 p) r7 I( a
; C; z- d) ]0 A# R8 ?5 ?2 F5 S" p; @5 K  c
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
: s5 o  M& n( p; Z4 j" N! g/* Initialize MCASP1 */
5 L2 E1 U: }/ e- \    mcasp = &MCASP_MODULE_1;
; m1 g8 m; u$ n+ T' ?$ U  \    mcasp->regs->GBLCTL  = 0;       // Reset! R! ?- F. C' v7 t7 T( @7 `8 R
    mcasp->regs->RGBLCTL = 0;       // Reset RX
& e; ~4 R0 K( {: o    mcasp->regs->XGBLCTL = 0;       // Reset TX4 ^4 P6 y1 ~" S' N2 a
    mcasp->regs->PWRDEMU = 1;       // Free-running- f- a  j( m7 r. J  w
   // configure McASP0 receive registers. x2 D6 j# ^& M, |
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
6 j/ S5 t: m1 R  I    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus  a1 @! @7 Y8 A1 Y# \( C- S8 t  o
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word$ y9 ^* k4 b" }# H+ F7 X
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
5 V7 q$ t$ e9 l0 K8 s: v    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)7 `3 U* c8 L0 ^
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1- Q1 w; x; r) W. @5 l9 n' Q
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
* c- }$ |0 |: n: s. R! W6 B    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: x) r" j  h0 Y9 K$ b- A2 V/ {) X0 R, d" i9 t' C- I
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
6 f. m' W. |/ a; b% g% C    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 d7 O6 c6 }3 G2 E+ T    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word6 i1 l4 Z- w1 t5 G6 k) o- t  ]& I* k
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-162 e2 Y$ X0 r* j; E0 w9 q/ _2 D
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
5 r0 u4 H( N& B- a' L+ u  \    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1$ F' r3 X. g* l5 Z$ N7 \1 t
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit* @0 w1 ^5 F, N( v. o  v  Q
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! T' x! M$ l# I" H& C. n
8 \) h, I; Z! G1 k
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
! W  x: ~1 q7 u# x' E& w6 s+ B- X    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
9 X; Z- {& r& M; g% z5 z! i    mcasp->regs->PFUNC      = 0;          // All MCASPs
2 C6 ?/ z) u4 n    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
: j) ?" f0 m+ Q7 w2 T
8 M8 I% F9 g' F8 A    mcasp->regs->DITCTL     = 0x00000000; // Not used
6 ?& R5 ?3 q2 d% N7 w3 \    mcasp->regs->DLBCTL     = 0x00000000; // Not used
) [5 A# f; C4 a" Z+ ^4 w3 l    mcasp->regs->AMUTE      = 0x00000000; // Not used( a8 C# T) `3 J- u( W, d2 ^

7 h" p& Q. g  _* Z$ b, G: ~/* Starting sections of the McASP*/
" V: e. n/ L' b9 J- e    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
% l! x- `' V; Z) {; s: }    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  & J# f* f* a* f  w, Z1 q$ S
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
! s1 Y" Y: D: p6 i2 c; [3 O    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );# c$ ^+ t( q# A$ _7 v

; q0 S0 X# {9 v% ~; T. ]    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; : N1 w3 n' g6 z: z- T- h/ C
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );7 N" \/ |& s5 T/ e& T: X
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
* X( G7 Y3 {, Z* m4 m3 m! N6 k    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
3 c/ V9 C& q6 P* U+ y6 [! _
# }3 J5 v& n9 ?0 ?+ w9 e    mcasp->regs->XSTAT = 0x0000ffff;
3 Q3 C, ?# d. X$ ^) Y3 d; s* d6 q    mcasp->regs->RSTAT = 0x0000ffff;
7 t# `& M( l6 |7 K, w3 n1 `( {6 D5 ]0 O( |: o( y
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;- m* d9 j3 J3 j# X8 h8 m7 O( s
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );8 l0 I/ ]0 Z7 V/ t+ N  G
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; * D/ ^- I$ N& a: L
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
2 a7 q9 s: G, _# ~! H" _, D
: b5 l* C+ x. Y! k- j3 u, @( m8 f+ N" P2 V    /* Write a 0, so that no underrun occurs after releasing the state machine */
: }* E" O  a) D; i8 q    mcasp->regs->XBUF5 = 0;
; S+ B0 w7 d3 _# d4 e) S" k    mcasp->regs->RBUF0 = 0;
: ]' g: x# i- Y0 B
, y4 R2 L! M( W8 k' Q5 ]    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
5 f' p. x- u* M    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
3 d5 V) Y: R( w' @    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
* A9 ^( B  T0 C5 Q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );3 \. C# [6 D# s7 a$ T$ c
1 _) S% [3 [! D, b7 t
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 3 d/ O6 E  B2 b& ?5 K1 J' E
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
6 u8 B- L' n3 G4 W: q    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 6 f# Q8 Q- v% I& g
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
6 N! w4 [0 w4 `* }/ T  v
! p  E8 I. F( Y. _. s    CSR = 0x0000;5 [" \3 c* _) e3 N* R
    INTC_INTMUX1 = 0x3d;) a1 U6 F' ]! t: b& p6 z
    ISTP = (unsigned int)vectors;
6 J0 M  q: _! Y- W- m5 X6 m8 X  c9 h    ICR = 0xFFF0;  
+ m/ ]! n, w6 M2 R    IER |= 0x12;  
0 p5 J. J- {6 k    CSR |= 0x01;  
( y0 n% e. |  t( O, R/ ]6 y8 C- I8 I! z+ C
% C+ ^  X2 N, l

6 o7 p! l/ G7 ?7 L8 }' x. V; c还有就是两个输入输出函数:- ?$ [4 ]" m* ]+ @6 @) @
void output_sample(Int32 out_data)& ^2 u8 a+ ~' u& F
{- [! F* v6 v( m. [! M! ~' \) }
  AIC31_data.uint = out_data;  0 j0 L4 A: J# y; F4 {  k) n; d* C
  MCASP1_XBUF5_32BIT = AIC31_data.uint;$ T9 y# ]- ^; m1 h' u6 `8 R
}! V0 Z) ?. Y0 `; N$ m# p/ R
1 M0 b4 \( y, \% `: G8 G# d- s
Int32 input_sample(void); S1 P5 k( F' r6 c, x& v
{  
( P- v- d$ x* B9 t' i  AIC31_data.uint = MCASP1_RBUF0_32BIT;  w# `8 p/ `+ b% Y3 F: v
  return (AIC31_data.uint);
9 r" x8 j* b; S0 k+ ]}
# ]; ~  h6 G8 w+ t$ Y* C. G+ n# n
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-3-16 11:55:59 | 只看该作者
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2025-6-17 18:45 , Processed in 0.041502 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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