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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:/ t/ t# E6 {. J1 A+ k( K6 m
main文件:! }3 ~/ M4 E2 `% n
interrupt void interrupt4(void)  
/ D/ G  E2 W6 w- |) j$ w8 J{- h+ W' a3 e8 U! X! L
  Uint32 sample;! K' p& r& G# c- P8 F2 Z" a5 j

8 E, B5 F3 Q' n* \- @* L: K  sample = input_sample(); // read L + R samples from ADC
0 i( }' @7 u) S, ]- P5 H  output_sample(sample);   // write L + R samples to DAC 9 N+ }3 q, c/ c( u$ R2 u' D
  return;
* Y; T! X' Q8 H& v! a}; J( c$ y" s( m/ A
3 M* H4 C7 t4 O% F
int main( void ); X) L$ F; T* Z+ R; g. f
{
- k( Q  [' I# V6 n4 Q- H. T. k. f& k: d
    /* Initialize BSL */2 p+ h7 z7 a8 I9 {: A) L
    EVMC6747_init( );# y! v9 r- n! v4 r! Q. }- k& D; ^2 ]7 T
        /* Call evmc6747_intr function */( V8 [2 b7 @* [( \2 U' x
    aic3106_init( );' Z, H  ^  Y1 ?+ x
        while(1);" Z1 [$ ~& L: ]
}
% X* ]$ O9 z9 H/ o, I% ], |6 c) _4 X' Y- y0 h1 v- G

. J- ~" ^9 j+ f% C" W8 Qaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题6 U  Z5 \1 Y, T: {
/* Initialize MCASP1 */
( b/ F4 S; k1 v) k    mcasp = &MCASP_MODULE_1;- U) x$ p' O, W3 O0 |8 M, T. a
    mcasp->regs->GBLCTL  = 0;       // Reset
' X8 w$ X# L% W    mcasp->regs->RGBLCTL = 0;       // Reset RX) k+ D8 x0 y' [% k$ E# Q$ u) _
    mcasp->regs->XGBLCTL = 0;       // Reset TX
; F3 Z. ]0 g2 m' s: I- ^    mcasp->regs->PWRDEMU = 1;       // Free-running
7 {' J3 }% [: }1 e- |2 e   // configure McASP0 receive registers
% [; }( W' W7 P9 D. j+ d( q    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
3 G$ X; f* H2 \+ z+ Y3 @7 s    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 s3 A$ n+ F% l0 m    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
. Q) E) F' Y! x    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side): q% O, y0 h7 U8 R3 p: p) I
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)+ n( ~; R8 X7 O& ]4 p0 I
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1( v4 X1 V8 [& q% i
    mcasp->regs->RINTCTL    = 0x00000000; // Not used- z; d) U) g4 A
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
9 q- Z0 D( s& K3 k0 W7 U2 U: m
7 W5 U1 h$ z  l* v8 Q1 j0 M# X/ L    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used/ ~, C/ k! Q9 H7 S- L
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus- N2 [2 E  q# `# b% v
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word5 G! z9 h5 j; F1 V, }/ O; z
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
  ~! u, A" M) W; u! s0 q% G, @1 |    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK, a- q/ a3 G8 p- Q- L
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
* U% m4 {6 t. B, h    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
2 r0 Y# j% [, P! m0 k    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" x+ {) \! V, ]0 L( Z8 K; U% v0 y0 |. d9 U
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN2 |* }4 ^  `; B) K4 K# P" R6 F
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT0 k3 G4 a1 d! s0 u" R! a' T7 Z
    mcasp->regs->PFUNC      = 0;          // All MCASPs
3 B! g; e. j" \) {    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1" a9 Q- y6 L* ~
0 T0 S& n) Y" \% B
    mcasp->regs->DITCTL     = 0x00000000; // Not used
; p  q$ |, V: o! Z' Q, Z: Y    mcasp->regs->DLBCTL     = 0x00000000; // Not used
0 B+ M5 x. _, b/ o( k    mcasp->regs->AMUTE      = 0x00000000; // Not used/ x6 j7 f' R* n5 Z% h7 O- @4 o& e6 V
1 J/ \1 q; f: }1 U# w
/* Starting sections of the McASP*/
) ^7 Z! P- a) Z5 u1 e- b3 z    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
' a* D/ b: @+ b' h' d4 n    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  / M! t0 F$ |% H' l3 e
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
' \9 I' G' i$ n6 m    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
, _3 t" N7 F3 Q7 \* u4 {( S' ~8 |: G- E/ k5 N8 ]$ j
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; $ D, n9 o/ M( [* w' E! h5 E8 W
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );6 E4 h( c$ @0 r' S5 g" W1 g8 \8 v
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
& W, Q0 O: I& I: ^! x    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
$ w7 S* X  X5 y
  _/ i3 g( |  S) Q& y    mcasp->regs->XSTAT = 0x0000ffff;
/ o3 H9 S% a  R) g: F( V) B    mcasp->regs->RSTAT = 0x0000ffff; 7 J0 M) [. J& D. Z
- ]% F8 q* C: m+ |6 j' T4 J
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
4 X/ U% m- @4 X4 b" @& ?- v# V! U; x* O    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
1 Z5 s' a3 K7 a2 l  I    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
3 J1 D; o. ?% V/ {. V( \3 D; X$ k    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );: W" W) O, F0 O6 E) i4 v

% [9 G$ q% L, K    /* Write a 0, so that no underrun occurs after releasing the state machine */  X6 t. \. s6 Q, m7 ?
    mcasp->regs->XBUF5 = 0;
1 M! A  J" ?  h    mcasp->regs->RBUF0 = 0;
" M. w- `+ Q. Y' x! X. a
0 o/ Y. w/ g# \    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
7 O7 W7 p- X6 Y  }# {' ~( k( P    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
# n5 V$ R3 p  v6 w# A    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
8 _) e6 @2 _. c) @1 Q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
) S" \$ ^9 X4 w4 x
/ k/ ~3 @) d$ e- _    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
" f5 {0 ?% I% b! R1 j    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );, b6 W% W3 b8 ^+ o* U, H2 S5 p
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; & U: X0 `) w  k3 ?) K/ p
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
5 F7 K& u/ F" S+ A
; \0 B& V5 B& t    CSR = 0x0000;# x# ]" ?5 j1 N8 U. J. Q
    INTC_INTMUX1 = 0x3d;: @/ K' U  |/ @! M) y
    ISTP = (unsigned int)vectors;
* i, J$ [8 N3 _; M- f1 v    ICR = 0xFFF0;  . G8 Q' g: {* ^# p" W+ C. f5 K
    IER |= 0x12;  $ b) X9 y3 y) r! x2 e9 R8 t
    CSR |= 0x01;  , q% _0 V& E" o& z& D. I9 G; x3 |
' T; `: k3 Z% i+ L2 t$ t" A
9 n9 m$ I0 ?2 O: x( V* M

1 d) Y( F/ y2 m& N" m' j$ w还有就是两个输入输出函数:
# u) A! r! V! D9 w- y" B  \void output_sample(Int32 out_data)- l9 u, v% l4 q' Z/ k+ g7 ^: j
{
' t- ?  B! i: E# m  AIC31_data.uint = out_data;  
0 U5 N( N0 O% R, B7 [" Z; x  MCASP1_XBUF5_32BIT = AIC31_data.uint;& {( N+ d$ R, Q, j1 f
}# f" ~1 @4 ~, z1 G1 r" L" k; K+ Y

0 d* k* m. d% j" T/ G0 d+ D7 }7 ?Int32 input_sample(void)
' z. w9 K6 ?( e+ P2 m{  ; m. F; T: o! ?+ D5 i4 u3 h/ R6 ^
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
- D' B% d) K# L5 Y  return (AIC31_data.uint);! k" M% i  P! B' f4 w: M2 d
}
, Z/ I6 }8 z& ~5 S) ?  _! `, H+ h. r
分享到:  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-11-3 20:35 , Processed in 0.044828 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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