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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
; ^: a8 w7 p. h% ^# bmain文件:7 }7 ^3 H, r1 t" @' ~
interrupt void interrupt4(void)  
* R- ?7 k0 O: R& A* s' J{
1 X1 b* M# c2 G( J0 y. f8 N3 d  Uint32 sample;- h2 x+ f4 \4 P1 U
+ _" x: j- n2 N" G4 S3 z9 W2 h* v
  sample = input_sample(); // read L + R samples from ADC
6 w( R8 O" [+ A" s  output_sample(sample);   // write L + R samples to DAC ' ]: {$ S% C8 Z, ]
  return;. U/ G, j& x9 ^/ i* \0 `# s
}. t3 l$ [4 v4 o' p
2 h: G9 g; B5 s, b) D/ j  E* S' v) H
int main( void )
, b, ^, w7 ?% e( b8 o$ U{
! D# X% ]6 x# C. v  J. n
5 `* G1 {, Z! P' h6 p    /* Initialize BSL *// @3 w! J+ |" x' B5 v
    EVMC6747_init( );
1 A8 \; s9 l- K9 e* c7 H3 d( d, n3 Q        /* Call evmc6747_intr function */4 {& X0 a9 O+ O
    aic3106_init( );% @& J3 i$ d3 C5 F" i5 W8 }- S
        while(1);4 m7 m' i4 |0 G! P; g* h! x
}
6 Y6 J6 m$ E2 _1 q( W
. _! n& M  d: p5 Z9 c# Y
& P5 s. E6 `3 `+ r  n. q# u" Iaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题0 b) g; b! p( R! a+ e6 w( b
/* Initialize MCASP1 */' k; p, R( N- Q' w) ]8 d
    mcasp = &MCASP_MODULE_1;
+ i  x; }$ L* N5 g  I/ N& {    mcasp->regs->GBLCTL  = 0;       // Reset* v! _& j4 `3 |0 Y) K7 e! j
    mcasp->regs->RGBLCTL = 0;       // Reset RX
6 m) a! }) r& L* X' x) g/ W' \* o    mcasp->regs->XGBLCTL = 0;       // Reset TX' l4 z% c+ C1 I9 ?3 O
    mcasp->regs->PWRDEMU = 1;       // Free-running+ W; l# U6 G6 U
   // configure McASP0 receive registers. b4 k$ R1 r3 |
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
" J% U' y- j6 B' z& D    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 ?, s2 C/ j) l4 p5 |: g, j% n    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 v: U' {1 o2 Z) j. a    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
+ ^9 p7 ^* [) m9 V    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)6 J+ J% h' R4 Q0 ~  k
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1/ ]& n( `( N5 H5 g- Q, i' f8 A  L
    mcasp->regs->RINTCTL    = 0x00000000; // Not used4 H! B5 V! f3 T. ?7 G
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& V7 x5 ?$ p( Y) p( ?

7 m; {0 F" Q5 v. A3 ^. R: C    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used. x, j, Q: p2 D! _) k+ h3 D/ S8 h
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ c9 a3 N4 P8 A7 b! U
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
# e! |  {/ G( [# c. W    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
2 a( c* y/ O; m. @; i. R    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK" C; K5 z' |3 g  w
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
! r/ x! C9 j5 B$ L5 |    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit$ Y& G2 e- D. z# |' B# d" z
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' r$ d6 O& C, p1 ]/ A

! q8 {4 S" O3 m7 p1 A0 o) ~    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
( ]; K( e3 k* b% [    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT9 Y7 |$ E$ `# c0 P! v7 H
    mcasp->regs->PFUNC      = 0;          // All MCASPs# _+ O( I: ^! U# B# \4 Y2 z* m% {6 [
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX11 l& U- Q/ w$ e( S; F; v
& _  |% V  ~/ B* f# S9 o
    mcasp->regs->DITCTL     = 0x00000000; // Not used: p, O* N4 \; P! c9 D( ?2 E
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
& R2 p1 A4 H6 A3 a! v; u/ i/ H1 x    mcasp->regs->AMUTE      = 0x00000000; // Not used/ }3 f+ X* S+ p  j

" W4 ^+ T& @2 |+ m/* Starting sections of the McASP*/" V4 ^6 e/ p' @4 X
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
$ w% h5 B3 ]6 B0 u0 z3 g8 L    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
9 j! v6 E& P1 `/ J    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ( Q2 b) |* t# M; {& f
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
9 n' J, x9 y0 h: x, q
( }7 W6 ~( }2 ]    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
( ^! V4 o+ c% A2 @% U! X    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );& ?8 \+ |" s' i
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
0 @3 b5 Z0 ^# ]+ o4 ^4 ?% L    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );% ]7 v% C0 K2 u! }  k  y5 y) }2 S1 K
% D/ v$ D6 t' o9 A" L
    mcasp->regs->XSTAT = 0x0000ffff;
5 U- n/ ?. ]8 ~    mcasp->regs->RSTAT = 0x0000ffff; 0 k: T" S& _: D3 h( |* j' g
9 n9 N/ a3 c0 U& r7 F4 }8 U4 g
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
1 I0 _% l8 }* B; R" G" ~7 u    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
# b# k, p. H6 e7 D  d& w* K/ R    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 8 a( d& O8 O1 u4 [8 o5 V9 n
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );. t: r7 e- V: I' D( M  q* y
. V  e+ x- L7 u6 _
    /* Write a 0, so that no underrun occurs after releasing the state machine */
. g1 y2 G8 H2 o1 ^  k    mcasp->regs->XBUF5 = 0;
/ }6 e( |# V/ q& U    mcasp->regs->RBUF0 = 0;
4 l  D8 ]8 m. A5 q* g- R
- }7 k, A& X" b) Q+ E' a* E    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
% v, n+ \, P2 K" j# l. t6 [) O    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
& w; Y4 {* v8 \) q' j4 @    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; $ o2 ^# ^( G' Q% F# _$ X
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );, ?: t8 O( ~( {6 \
4 w  y* |) {0 I0 y
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 8 a4 e4 u9 i/ Z$ a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
# h7 v" o; v: ?: a: u% {: M    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 3 k+ d4 X9 D2 `. X  R
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# _1 ~: D) `3 H" k: V* v
+ A" Y5 t1 ?& }! g    CSR = 0x0000;9 x& v% Z" y- T' ^
    INTC_INTMUX1 = 0x3d;
3 |& \7 P  N6 N7 h/ i. R' C2 @1 {    ISTP = (unsigned int)vectors;, L$ @* _7 _" x/ n! e" J) @
    ICR = 0xFFF0;    n% D) L7 r- b) n! O
    IER |= 0x12;  
. z; C6 a: h1 ~. m  L+ x, `6 F8 B8 u    CSR |= 0x01;  % ]' t. a) x8 k1 J8 U5 i' A5 ~6 T9 A

) Y1 w- I6 X3 M, Y6 H
9 M0 V5 x0 ]- y
( k/ Q+ K( g% F还有就是两个输入输出函数:
9 Y2 D7 ~" C5 |( d5 M' fvoid output_sample(Int32 out_data)
  U! w8 ]. }: P9 H# n{0 m4 c) x! C/ ^. x
  AIC31_data.uint = out_data;  
. e% a$ |0 B  h, @' w3 d/ n  MCASP1_XBUF5_32BIT = AIC31_data.uint;; ~( m# c/ l" }3 [5 i8 W% y6 d
}  O, b, l/ I/ ?: N9 }1 U: X4 {

; M& I4 ]# M8 d9 f0 `Int32 input_sample(void). \- ^) A6 i) P* ]/ F; |( t
{  
$ W7 q$ O6 i  I6 @+ |3 `  AIC31_data.uint = MCASP1_RBUF0_32BIT;
3 ^, x+ g% v$ c& a% F. o6 b+ M  return (AIC31_data.uint);2 k  r. Z, g5 J+ w- F( Y
}/ G/ k% e7 v6 u! h0 e6 p+ N" N

- e1 G; L4 b) _$ U* U
分享到:  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-12-7 21:10 , Processed in 0.049249 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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