C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
  ^7 o. K- h& x3 v1 tmain文件:
7 t9 {9 f# e/ o8 b5 W4 S9 ~interrupt void interrupt4(void)  
( K2 s. C7 j+ k: X. Y; {/ l0 r{
* @  _" X* w+ {. J  Uint32 sample;
& h& \" a( D  b- y$ U: F# A& N: m0 f) F7 D& D
  sample = input_sample(); // read L + R samples from ADC
- G0 u/ Y2 B! }: v+ Q  output_sample(sample);   // write L + R samples to DAC
& \5 [! K6 k1 y6 R  return;0 h! i% {4 p5 R, y* a
}
: @5 I+ i, u& J' L" U5 J4 v+ s6 F3 x3 J# ]; @
int main( void ); B( [/ m% m  ?& Y3 @- a
{. }, o: [; C2 m+ M2 D* B3 r2 k) _( X! j
" c) Z1 d. k* }8 \! l0 k
    /* Initialize BSL */
" ~( z; n( l5 ^9 ]6 z6 ]0 D    EVMC6747_init( );
% ~5 ^. X" j& X3 b' t# S        /* Call evmc6747_intr function */+ O; O1 J0 X# G. n! b- s
    aic3106_init( );1 n$ y. F* u1 c% W2 h4 }8 ~% |
        while(1);
6 ]7 C$ A6 S& i- g1 p4 ^7 g}1 a8 u3 E, C: @1 f6 Y* J

& ]( s1 b6 u& X& X0 l
# F; _3 P* T0 N+ K# v: {- \+ G( b& vaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
( W3 \/ q# `0 n% c3 n6 `/ ?/ g( ~1 |/* Initialize MCASP1 */1 _* A" N4 y/ |  o/ T" \
    mcasp = &MCASP_MODULE_1;
4 r  ?6 Y; S6 x6 s    mcasp->regs->GBLCTL  = 0;       // Reset
, N9 Q7 t6 z# e2 j" ^& j    mcasp->regs->RGBLCTL = 0;       // Reset RX% |5 I( F* @+ Q; j4 C; v+ S
    mcasp->regs->XGBLCTL = 0;       // Reset TX0 [0 z" z4 N6 @8 Y4 X! ]! V
    mcasp->regs->PWRDEMU = 1;       // Free-running0 \+ v  L8 Y; Z7 B& r
   // configure McASP0 receive registers
4 N9 Z& c* U% s+ E8 j/ ?    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used( e! ^. Y  A+ m+ f& g) ^3 [' y& E
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ X# C- Z+ K4 a  E- p    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
# g$ [8 b; f& K* ~0 ~, {& ~- W' H    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)1 V# B$ L9 T  G; A$ X
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
; O9 |/ `* ]2 `+ v3 ]    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1# X" Y- o+ S; W
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
9 W7 d  A9 X# B" X; h' B/ k: Q    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 C! t9 U6 S3 Q; h* q' F: `4 p" d
, Y( z3 `9 F- w4 |* e: ~
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
( E# }9 Y& G: b$ d    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, a- E+ V6 Q% @    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word6 V2 ~* K8 A( G
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16! T4 V2 ^' O7 Q* b: ^& p1 v
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK) M7 y! q, h% B- l5 U; G' ]* l
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1, ~6 w" Z) R1 N
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
3 g+ o; J. V0 N' q; }    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' z& i) h) W4 _

3 Z, t$ n0 Y8 E' g* N, @    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
4 [( L4 r: Q6 s/ \- Z5 n    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT4 R3 Z$ X3 t0 Z2 k8 J& R. q0 [
    mcasp->regs->PFUNC      = 0;          // All MCASPs: ?+ t4 d# G. ?  T- I" U
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
+ q1 U$ ]3 f9 S6 G2 P( ~+ v
' h! a: B6 y; y    mcasp->regs->DITCTL     = 0x00000000; // Not used. a, i+ n, Z0 o
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
7 t! m' Y8 R; m$ F$ |5 ?# x    mcasp->regs->AMUTE      = 0x00000000; // Not used( k' E9 x9 v  L/ D# |0 y4 |  z. q

% `5 j$ k* w1 n4 k1 Y/* Starting sections of the McASP*/( B% t6 c, x3 k  K- Q
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 2 j+ a/ D% g: E
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  + i9 G, n+ `- q2 y
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 9 X" U3 [1 S4 d! ]  V' B
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
; k, r9 \: @8 b$ t! K; ^) C; O% X: c3 t- Y* n' o
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
6 g2 M* f# O1 q3 |    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );4 U' V5 F; b4 ?# N: B2 H" r# G
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
" D( Z7 K% x6 L; t  n( j( O8 ]4 Z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
. ^4 [+ C) J! [% H0 R  F: N$ V% b! {
    mcasp->regs->XSTAT = 0x0000ffff;
( L+ @/ I3 C  g# Y    mcasp->regs->RSTAT = 0x0000ffff;   ^% ^: T4 }4 r

& O7 a6 J1 t2 f; ]* P& G9 N    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
1 ^% p* D; }  w; S+ J' H! L    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );( |0 a6 s- X4 M+ k4 s7 C
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; : ?2 y8 J& _! S: B# G4 L
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
: t% Z3 @* C% V/ ~6 m: p& X% I+ r( u% E8 ]
    /* Write a 0, so that no underrun occurs after releasing the state machine */- f( ]7 N' y( D- q6 o+ S+ G+ I
    mcasp->regs->XBUF5 = 0;* U% ~) q* @# v! k. ]% E" I9 b
    mcasp->regs->RBUF0 = 0;
7 U% Z) @# c, \8 D9 e$ _+ E9 ?" a( J& @# J/ Y
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ) L$ G3 v5 O: J" c
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
0 u& Q7 H) K+ d" \4 Z# C    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;   g9 `% O8 }2 O$ I0 g! o
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );3 ^/ q7 |' G, q

4 F# ]% a0 [4 _! j    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 4 r* `  C" f0 l2 i8 E" }! N8 M
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
  `! u# f2 l8 d1 C/ Z    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
4 Y  r) R$ l( l% G    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );: }$ H1 B- D7 W4 r) C6 U) N
  s# `: @' ^( {5 M8 Z( w  {
    CSR = 0x0000;& K- q  ~/ }9 t  ~1 b9 s$ x
    INTC_INTMUX1 = 0x3d;
8 L% y9 X1 d6 S' N. b' `1 R    ISTP = (unsigned int)vectors;
' _7 R% {# M1 y" I  ?, O    ICR = 0xFFF0;  0 L! G5 ]/ \, u+ N5 O
    IER |= 0x12;  
- y" u3 ^3 m& ], W4 F1 W    CSR |= 0x01;  
: l' b/ c4 N% b6 q6 B: G
* D! ~3 ~$ P7 H# z3 g/ _: d: v  u1 C3 \+ g" V/ H- f

" f% ?& v8 P0 ]: x7 W+ K* A/ K还有就是两个输入输出函数:* D/ E2 W. @1 V: M) E- a, F
void output_sample(Int32 out_data)
# x3 G) ^. W4 L4 I/ I8 e: k' C{
7 O# A0 G4 M/ E) J  AIC31_data.uint = out_data;  ' m1 X5 _5 ~! b/ B# `) X
  MCASP1_XBUF5_32BIT = AIC31_data.uint;1 ^" R& @- T5 O4 W4 T2 ~
}4 K' i. I7 }& x; U( j  J4 b/ n6 L
0 r0 \% _+ S- j: Y# s7 w8 o- e
Int32 input_sample(void)2 n, t8 Y( ?2 D, ?- V4 d' d4 `  b$ \
{  
/ ~1 d0 v5 U* u4 ?, u# S. W. x- D  AIC31_data.uint = MCASP1_RBUF0_32BIT;1 Z; z, ~# H7 W/ t8 N( d, |! p
  return (AIC31_data.uint);3 r# M/ C% m; r# C6 W* k  ^% [) I* i
}
5 N2 e) F: W  A- U+ e. g5 v. `
0 ~' d' w; }+ i+ s4 d9 Z
分享到:  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, 2026-3-10 12:24 , Processed in 0.041829 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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