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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
$ u( P% e) `: U6 s6 l( Q7 Imain文件:
/ p; J% k  V  H1 Y$ _interrupt void interrupt4(void)  & u& p7 m) R0 I  h& |
{
' K1 P: ?/ E4 |, `1 ^* V  Uint32 sample;
8 V. }! a; v, r, s
: B! ?( u" Z" Y1 N  sample = input_sample(); // read L + R samples from ADC+ |# D8 T0 W5 R! N
  output_sample(sample);   // write L + R samples to DAC
, g& r! b: k+ R6 @# g  J1 @0 C$ T4 u  return;
* t2 u! _/ ~: H& }$ R}9 H0 y# q* ^! c/ b' j5 p1 l3 H
- q. V& ^9 W1 [$ d9 n; p
int main( void )
. s- B- \4 [. e  h; a1 H{
, G3 S; A( r% |. I/ o* l: n0 |
$ Y  u- v# {+ d  ?    /* Initialize BSL */4 t  r+ k" M. `2 p& x2 Z6 [! E  m
    EVMC6747_init( );$ _' s8 X% d8 l6 L+ M& O( J
        /* Call evmc6747_intr function */
/ y3 x4 p/ Q8 B, k, |/ s    aic3106_init( );. f& `- D3 g/ ]
        while(1);7 i) I# f' o, h% N
}( H1 G9 b) u2 G' F, z) ?0 U7 P
0 W3 B3 Y# K& r, Q: j! R9 s

* K4 e. R7 r* l6 maic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
! ^+ ~* d/ s# [# e/* Initialize MCASP1 */
* T8 K3 w  o( n; z$ _  r& z    mcasp = &MCASP_MODULE_1;# ~# Z7 }7 C/ O' }3 i3 M8 O
    mcasp->regs->GBLCTL  = 0;       // Reset# ]. u+ _8 C; e) V
    mcasp->regs->RGBLCTL = 0;       // Reset RX
; k: r$ X9 h+ X4 }) u/ n    mcasp->regs->XGBLCTL = 0;       // Reset TX
4 s5 |+ X9 a6 P    mcasp->regs->PWRDEMU = 1;       // Free-running6 O" V. r+ P1 y" M: Z; P. f
   // configure McASP0 receive registers3 v/ w0 Y8 x6 H2 _
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
" w9 F  N% q1 K% ?# j    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 u  d; N: `7 F
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
, S" u7 n  w/ K    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side), C0 C8 W/ z5 X. x; ^0 h
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
/ x+ y' z9 F4 a. V6 K! X% T    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
2 L( S' X" V1 v    mcasp->regs->RINTCTL    = 0x00000000; // Not used0 }$ l( v( w, q/ L$ `
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
5 v8 C' W: L! a6 a- `6 `1 I/ O  b2 K; S- d. A/ x
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used4 M& [, W& W+ @! S; m* o' b! Y
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 j0 w" c  v1 _/ ?
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word; @* H1 B2 Q( o7 E; g- c6 f
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
, L+ w) \' @3 N! Y9 z" h! P: g3 t    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK. j* @* ~! U1 v  i+ M# S
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
( |% v( q% ], ~5 {( I    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit+ ^2 f8 h! T' \
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& T. M: P3 d" P6 m9 u4 n8 R% X

' c9 Z  {4 Z4 {! \" q6 n    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
9 G  B$ C$ ~- r9 R% ?    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
% v% }; P" Y: S1 J- F; X    mcasp->regs->PFUNC      = 0;          // All MCASPs
( z* q' l- e  U" f" C    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
. h4 }8 A' Z+ v# N/ w! U8 y' G, F$ w0 i# {2 E' K: c0 ~. N/ v
    mcasp->regs->DITCTL     = 0x00000000; // Not used0 m1 l. K; G+ |% |! ]
    mcasp->regs->DLBCTL     = 0x00000000; // Not used) {7 }" {4 ~1 T/ f* h# P
    mcasp->regs->AMUTE      = 0x00000000; // Not used
5 z& V& W, `8 ]8 k, m/ C6 h% J, x) U- \
/* Starting sections of the McASP*/
7 ]5 x- b( Q/ C6 @7 J    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
! d: W  T! j. K) t; E* K. l    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
: h( s2 d% u7 V) X/ [    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
. \) C- X  N, s: I3 F    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
) [8 w  Z; D% Q2 d; O$ t, S9 D% }: {; w+ `7 M' ^
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 2 ~: {. C: g+ o: n7 @
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
" g0 w( F6 o8 n  w/ B9 @6 R& A    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
8 q0 \: ]! `; K8 U2 ]7 o    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );; @, U+ ~- U9 I% k
7 H& I9 T3 [" V! p. @
    mcasp->regs->XSTAT = 0x0000ffff;
$ [4 j" o! \# W/ s6 P    mcasp->regs->RSTAT = 0x0000ffff; 9 P# @! I" k' n+ v
9 d9 K  L* N: p& N# ]7 [
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;" N, U: U; D& s# E& G9 }0 ~
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
4 x% g1 U/ E2 s% \4 n) o6 w    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 4 W/ t8 S4 E) H/ P# i8 Z# V
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
  F& g! S2 s1 Q3 `  M" D/ Q2 [8 D( _5 `2 w: I5 c4 Z
    /* Write a 0, so that no underrun occurs after releasing the state machine */
; W: a* E3 c1 x    mcasp->regs->XBUF5 = 0;: \5 T0 M9 a! Z2 Z' P5 g8 P
    mcasp->regs->RBUF0 = 0;
) R$ H( k  p- T0 p/ H$ i" j3 K: b' s# X" h! p8 d9 [
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
2 C; _  [, n* x. T    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
5 X3 r7 d: }- r' R) m9 k% J7 V    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
  ^% p: Q' R4 M7 C8 U- t. i    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
* h" g+ C& q, I3 Q. x- K( `3 e3 i& g  J2 K, j
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; # i8 Q5 {* c+ b  D
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );, E! s! Y6 @, r3 R) E
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
" Z- |! E* y: H  @( y9 J8 C- m    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );8 X7 ~( u2 p9 d" H

" w9 R: c3 A; z4 ^: f; l- _    CSR = 0x0000;
" o  L0 A$ [3 A# g    INTC_INTMUX1 = 0x3d;
8 g% P2 J0 Z7 l  A' ^2 _( Z    ISTP = (unsigned int)vectors;" r& E+ L# t" q* Q
    ICR = 0xFFF0;  8 [, H. O" c/ {2 M4 C
    IER |= 0x12;  
. e& x  f1 y* r    CSR |= 0x01;  
0 I5 L; z0 @' t4 `, t% O  ?5 w" [0 Q9 m3 w
/ ?" w& ]- u9 z# Q: x" D
) G; ?9 K( r) ]9 E% q
还有就是两个输入输出函数:
3 E  B2 N! P  l7 c: ?' c7 Bvoid output_sample(Int32 out_data)7 r" \, h0 _* D! X$ B$ e
{
+ d/ }% @( F/ U* e/ x5 x9 G  AIC31_data.uint = out_data;  
9 b( Q: ^  ]3 g8 b& V# P5 n0 r  T  MCASP1_XBUF5_32BIT = AIC31_data.uint;) R9 C: w% G2 K* ?, [5 h1 p
}( W& q5 b: l; B5 L7 b2 x
+ J* |% o' g- v! V
Int32 input_sample(void)
, u: n0 h; Q& X$ F7 |  K{  
, o/ h2 K' H) ?  s3 f! p# A  AIC31_data.uint = MCASP1_RBUF0_32BIT;
8 E# A/ k0 o  }: B% c0 q9 o, P$ W  return (AIC31_data.uint);
! Z! h" T# o8 E2 z2 f  |}
6 E6 S5 b9 R# c# j" A! r6 O* M+ w' p( G, p* T
分享到:  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-29 15:04 , Processed in 0.041370 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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