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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:, P) u- r' G2 _( |0 h* y* ^) M5 a
main文件:& q3 g8 U6 {" n0 v$ i8 p
interrupt void interrupt4(void)  - u1 x& M3 @3 g  N. i9 ?2 N3 e% `
{8 u! Z2 W, o7 n9 i9 t$ t5 M9 k
  Uint32 sample;4 T2 E; J( }; y- ~3 B0 e7 ?

3 X8 E" o" e- Y6 D7 S3 z  sample = input_sample(); // read L + R samples from ADC
( o' {2 Y& D4 v8 S5 }  output_sample(sample);   // write L + R samples to DAC , I: m) N5 x5 q/ S& l8 f
  return;
* z: I. f5 I- {+ v" R}
! M6 d/ Y5 ], p' z1 j# ^, ]! @% i4 ], @6 z, D9 B
int main( void )5 s" g, E+ l  {  I
{: p! K2 j6 d, b8 o% v
9 [) w" u( y! b2 U/ J
    /* Initialize BSL */. i) X/ _) `- q. L+ {% g/ F
    EVMC6747_init( );
* l5 O  w- n; H" `1 @, m% k        /* Call evmc6747_intr function */
5 |6 Z+ c( J$ Z( ~6 B+ d( s& j    aic3106_init( );
& }) {4 u! S1 V3 S! @        while(1);$ _2 y. w# a6 z' n  ]3 l$ A
}
" f5 |4 s! D% k3 l1 X4 H4 b" Z$ f$ E

8 o2 W+ `: k: l( R4 g, a; faic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题7 {/ [2 h" x: g+ m
/* Initialize MCASP1 */
+ ^: g& q& ~$ H5 J/ q    mcasp = &MCASP_MODULE_1;
" x( q, m9 N  l3 E    mcasp->regs->GBLCTL  = 0;       // Reset
+ F$ q2 W4 ~; d    mcasp->regs->RGBLCTL = 0;       // Reset RX
, W% A0 B. a& i* H% U    mcasp->regs->XGBLCTL = 0;       // Reset TX
5 P  e: ]7 B2 u% ?2 W+ M" i4 r' c+ [    mcasp->regs->PWRDEMU = 1;       // Free-running
  `3 e  F. n; k5 `! A/ j8 f* ^   // configure McASP0 receive registers. q' T7 b3 _! @2 Q3 a" B  [
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
' |  M* h; H+ i3 u( l" T    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 t  g: N+ Z# D! ^+ d
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
* B6 x7 I+ {9 c    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
& l6 s) u( ~: M8 i7 T, s5 ?4 v    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)6 L' \- M; v/ b
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,16 `1 J. J# d! e  _3 d0 `* G
    mcasp->regs->RINTCTL    = 0x00000000; // Not used( g( k3 ]' u4 u1 {9 v  ^" y
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 B& D/ F' _( {! p- z: h, e7 r1 A% W" H( T% u8 m) J# m. r2 G
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
  b3 j( B! B! G9 y" V4 c0 a+ S    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& f) C1 S4 L1 R: A- ~
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
& i8 X9 a) o. a1 N/ P: d    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
7 c0 y! H# d8 x1 I; n* Q6 I' M    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK& ]6 _2 h# ]2 X
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
7 Y( {( M. p  X8 w$ `    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
5 T" H* _* b9 }5 M    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 I: H2 n" W! c. R4 `8 ~
+ L" f; k6 g4 G' u3 c9 k
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN* @- U; L# k8 k" T6 r
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT6 I0 i  m. h$ {! F
    mcasp->regs->PFUNC      = 0;          // All MCASPs$ t  V) F5 {( p# g# P% C
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1# B/ H! L7 |, r+ U

7 c2 v( x& `4 X% K# v    mcasp->regs->DITCTL     = 0x00000000; // Not used
/ B  Q5 M+ i7 k6 L; j    mcasp->regs->DLBCTL     = 0x00000000; // Not used
. H# @) L; J+ A' W    mcasp->regs->AMUTE      = 0x00000000; // Not used
7 v6 P. I$ d4 X
; }7 z3 T6 J) Y% ^% W- s( g) b. E/* Starting sections of the McASP*/1 g( m+ i$ Q0 `7 p6 L& P" \+ Q, L8 K
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
1 L8 D& {! @, L" }6 {    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
$ N, U9 x( X( D! ^    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;   q" a- N4 b$ u0 |+ ]8 f! N2 J) V
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );1 G( C" r4 }# V  t, H0 f
. k2 ]" }4 A; T9 V% Q
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
  e* b' W# s( d( @3 Q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );7 E: c1 A1 W! n! v; w
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 5 A6 O2 H0 K1 Z6 R
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
+ d5 v% Z$ M/ W+ A$ e8 k  D* W
' K+ H+ R1 H+ [$ J' `  m    mcasp->regs->XSTAT = 0x0000ffff; * J5 j  B! g) z( F( Y0 R, m
    mcasp->regs->RSTAT = 0x0000ffff;
( N( q# m: M! F7 m0 {8 ?
7 N3 {, h9 ?* `' h, c2 c    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;$ Z$ L' \8 S! M3 U! b$ q: r1 p
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );. v$ E6 U+ G' q+ H, w+ ~0 R
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; , z) R/ \. n, k; {% O6 k
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
3 `$ d* F5 d, R4 p4 a& N% D' _% w+ l. S
    /* Write a 0, so that no underrun occurs after releasing the state machine */
3 P4 E! q$ e1 o- U& M    mcasp->regs->XBUF5 = 0;
, K; I! ?$ v! w' n' c: E3 K    mcasp->regs->RBUF0 = 0;
  }( A- W' C3 `1 \
. y2 g4 `* D: }" q' p# m    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
, ~* U# k) |- ~    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );8 }& f) a8 L' d0 R
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;   U) l/ e5 Q+ p+ g( L
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
  ]3 D1 h$ j( F- V
9 x, I' Z+ L4 c: |/ q) ^    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
( i5 T" h; u: i6 l8 M- ]2 T    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
9 n8 F0 s$ {4 l" o! \    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
1 t: f6 j' n) v    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
5 G( q/ O% r2 L% M  G5 G' i" h" ]  G  ~% U' r$ x/ _! Y9 ~  Q
    CSR = 0x0000;2 R- C8 n" G/ ^$ j: M6 O
    INTC_INTMUX1 = 0x3d;
" B5 m. {) U- d2 \0 u) R    ISTP = (unsigned int)vectors;
7 ^" v! @: Y: q& r    ICR = 0xFFF0;  
. H5 y$ y3 o- O* \' ~1 {    IER |= 0x12;  
" Q4 A6 f0 B% Y- u) f; i    CSR |= 0x01;  2 n* U3 F9 h/ ^, O$ G8 O) v) H' n

0 l, d% U3 h% l* _% k1 Y( }8 T* n5 s& w; x( ^: I. M0 l
" j/ T% h2 w) {" m7 {9 Y( o: a
还有就是两个输入输出函数:
. u) w; w! e/ |- @; L* `* Svoid output_sample(Int32 out_data)$ X( x$ O4 i5 c; R
{# d  C+ A5 W* a- p" j* l4 A8 L
  AIC31_data.uint = out_data;  
" L& Y$ }6 b% ]6 e$ S/ P  MCASP1_XBUF5_32BIT = AIC31_data.uint;9 v5 p: y% W( i4 |
}& Y  s3 ?8 `2 Y# q, O4 e' u

4 R9 ^# u& M  N* B$ ]9 jInt32 input_sample(void), t$ B  S- ^5 a
{  
2 S+ y9 @4 y7 Z: B* X( C' O  AIC31_data.uint = MCASP1_RBUF0_32BIT;
+ t+ {; d2 [  r# R  return (AIC31_data.uint);/ O1 c& V8 o$ a( |
}
, Q5 P6 _) F2 i0 M4 r; p) |3 O2 `. ]* E. C
分享到:  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-25 20:02 , Processed in 0.039957 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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