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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
$ F) q9 \/ I; ]. s9 n, Omain文件:
" w, R( U* C# \0 O( r3 d7 kinterrupt void interrupt4(void)  
4 @* H- h6 [( P( n& \! o" c% \{2 b" o& C& \, O- ?5 j6 P; _1 E
  Uint32 sample;' t% L6 W% @% r8 W

6 f# f* y8 ~" w+ @; s# k  sample = input_sample(); // read L + R samples from ADC
2 W! p4 j: H* `& L  output_sample(sample);   // write L + R samples to DAC   [% H6 }6 V& \% N- }( o& j: R
  return;0 w9 _; s9 h% D& W" r! c; O
}
4 Y  Q  S: q0 @$ S
, s& N8 n& G$ q5 P: \int main( void )
! W. J; b# U  G{2 _5 t& L* S1 s+ U$ b

& {5 [" T7 F1 L: j5 t2 B    /* Initialize BSL */- l6 a' T/ A" o" \* W
    EVMC6747_init( );
. C- R% _- D1 z3 d% r0 v( S        /* Call evmc6747_intr function */7 {" s, E9 H+ u4 y4 p
    aic3106_init( );
9 r7 |4 E3 |# O; y4 p8 M( N        while(1);0 \$ X& [# H9 A' K! E
}: h& \6 @8 w! S) f

6 r+ Y8 I9 c4 \3 A6 p- y6 E
" t7 y! U. ]7 waic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
1 v5 B% \1 Z) ~; ^& I/* Initialize MCASP1 */
" D2 j  h. c( ?! Y  P$ z    mcasp = &MCASP_MODULE_1;
" Q' d  k: n6 i    mcasp->regs->GBLCTL  = 0;       // Reset4 V9 D0 u3 o3 \. v7 y
    mcasp->regs->RGBLCTL = 0;       // Reset RX
: a* i; q* j$ c2 U* _, K2 {    mcasp->regs->XGBLCTL = 0;       // Reset TX
2 z$ R* I. q- q    mcasp->regs->PWRDEMU = 1;       // Free-running
! f6 ]: F% Q6 I   // configure McASP0 receive registers+ ?2 A2 \, P% B% k/ P3 q9 r( K
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used* ~/ n& h, z( _; }9 i- a
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% G, W3 P* R7 M  Z* s7 ^    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word  v. ?' D& L$ g' ^
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
& L; T) S; ~0 k- d    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)- U+ X2 j8 [, C6 g) q9 D+ Z( Y  n$ E
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
  N4 ?9 Y9 l* P( i' M4 |    mcasp->regs->RINTCTL    = 0x00000000; // Not used5 V/ Y0 y# M; z# P$ u" G
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 N5 A' _( Y( y# W8 Z; Q: Q4 g  w% U6 r+ G
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used, q& U' g1 P$ G5 c% f, K" K! b
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ A, y  Q# U0 |( Z9 m
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
% q+ d. k% f& D( R0 i    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-160 h3 O, ~# p6 ?  R6 m1 g! ~6 j( I
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
# P+ v4 J: F; Z    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
5 z5 ^- f1 \7 W( @3 z+ |    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
- U7 U9 n# R$ F1 H3 {* \    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
9 w. I3 w& m: Y7 _% d! y/ N) R& n' o! ?& j. Z# m3 `
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
2 r; |0 ]. b3 J- A( z1 S( P    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
& p8 h. ~( `; b; e    mcasp->regs->PFUNC      = 0;          // All MCASPs/ |. A5 ]% |. m
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
8 \+ [) ^- s' a5 h* F
7 i+ G0 Q; B5 T$ d    mcasp->regs->DITCTL     = 0x00000000; // Not used
* G4 g2 {: U: Z: o9 x    mcasp->regs->DLBCTL     = 0x00000000; // Not used0 F8 E  C' B; z  A0 m3 K0 e
    mcasp->regs->AMUTE      = 0x00000000; // Not used
' z8 \' |! Q: i0 s) G" u: M7 W, ?% X9 W( G' b! l( `
/* Starting sections of the McASP*/
2 Q. i* T$ j7 D$ D2 z# ~    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ( l& I+ U6 }' a- d' k
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  5 R8 l, ^$ ?. J  q, B1 ~
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; $ c0 x% l5 h9 p+ v
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );9 z! N6 j6 S) o: P" n  M
( n4 I, Q# ]* K8 m& N
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
: }( V7 B+ e* a- w3 c: |$ s3 ^    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );* O5 }  J+ v" ~
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ( h* _8 {" v3 @. y6 U, z4 n0 a' p* ?. V
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
, P8 E; p) d" M& y3 ^8 @1 N: S( w6 @' o- a* {* X; R7 f( k8 v$ k9 _
    mcasp->regs->XSTAT = 0x0000ffff; " V0 }* B, R& U* Q
    mcasp->regs->RSTAT = 0x0000ffff;   i  X4 ~5 X: D5 H5 t/ s

# l$ h2 Q! b( h0 o    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
9 Y: L; H% `* ?0 e9 f8 H    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );4 ]8 k2 H) m& r- B
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; % j( E( }/ e3 c; G6 q5 ]) J( r
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
) A' K! x2 L* J' @- a6 R2 c+ m8 L" e1 X' V% ~; L3 Y8 ^/ j
    /* Write a 0, so that no underrun occurs after releasing the state machine */9 I$ Y- A2 R$ j. _2 z
    mcasp->regs->XBUF5 = 0;+ ?, a3 }  V! A; E
    mcasp->regs->RBUF0 = 0;
8 M6 L) u3 h  v7 S' M0 O  E+ U2 ^7 ]) ^& A& h, E; y8 C
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
2 J0 ~# ]6 G9 ?: P, W8 V  q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
" W! g7 K' a6 l0 C- ^! m    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ! k/ P2 H% ]& I5 `% L/ ~* e
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );; W& x2 `# `! ]9 O0 D; U/ `7 l) z
, U& j6 g1 G  s( h) t& O7 J3 b
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
) Q$ s9 x& L* Y7 D    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
# g: ~. M( F& b. f& y. E    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ! ?# ~& D7 T2 n
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );# o4 g( A* I. z7 p7 N

' Y6 b  V# p4 S: l9 w( V8 @, Y    CSR = 0x0000;
" e. k( [  i9 m; \; k. {  |    INTC_INTMUX1 = 0x3d;6 z, P" W$ G& j, n, B
    ISTP = (unsigned int)vectors;% i8 T$ R7 x  j& X
    ICR = 0xFFF0;  0 ~* U9 j8 K8 \! _. B
    IER |= 0x12;  
+ J4 l8 p6 V1 N3 {    CSR |= 0x01;  6 a# v$ |4 x. \# U9 m
, g# ^9 U1 J" y$ ?
+ M. B2 i! G% O: K
6 _4 {+ i, b; `7 V
还有就是两个输入输出函数:9 e! C  Q# S: ]( j9 J1 W
void output_sample(Int32 out_data)
  b; E( i! ?* S' P+ a9 T8 R1 M{$ |" A# |. `& C0 B
  AIC31_data.uint = out_data;  
* j1 \: |6 p* g% d. l/ F  MCASP1_XBUF5_32BIT = AIC31_data.uint;
, f# e" l, B. J. m6 G/ d}, N$ V2 G( E9 K! F5 F
! E, l  H7 O8 y* g; ^, M
Int32 input_sample(void)
  b' u, B) p! V8 X. C" a# l' L" V{  
, T3 z( h* ?9 j# v  AIC31_data.uint = MCASP1_RBUF0_32BIT;) @( T; x, W0 m4 D
  return (AIC31_data.uint);
, Z& X8 {; x- `7 t9 ~7 q}  {9 a  ~( n) y- ?

3 ]- F* e; Y! W+ g
分享到:  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-25 16:58 , Processed in 0.049573 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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