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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:6 e' P. `$ }* |( [+ ~7 K
main文件:
7 K# Y2 a) G# {interrupt void interrupt4(void)  
( ?5 L( R) ^; u" O{& T; W) ^2 j) f; T; l
  Uint32 sample;  }  K4 c% p( D: Y; R

9 S4 C9 X. J: ?3 A! Q  sample = input_sample(); // read L + R samples from ADC/ _+ V7 }; A# R: B9 e/ k
  output_sample(sample);   // write L + R samples to DAC
' ^! i) j# e' j6 Z  return;5 I. ?2 I6 x2 L! M( I
}: ?. Q  M5 `- L
3 E2 t6 @9 r. L( [/ I7 w
int main( void )
' O  |6 ~: c. n% J{) l- L+ L. K% a4 M& _+ H; @

: c8 K+ P' `/ D) J- ^# Q& m& _  e5 Z    /* Initialize BSL */
& y  S6 Z$ L! Y3 _9 ?    EVMC6747_init( );
* {( t& ]' c4 m" `" `0 K: J        /* Call evmc6747_intr function */: W. \! T9 m% [- j9 p# L
    aic3106_init( );
6 v& p/ K; h0 i: O) a' T4 `; }        while(1);; p  e; A4 s- k8 R. T
}9 C" l$ z3 h1 U( I6 A6 N

  \7 z3 H3 J' i# g; I8 ]. t# B. ^8 E) W7 F
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题" e) y9 j3 v! m! ~; l3 ?0 N
/* Initialize MCASP1 */4 ~" R) l8 b# z- z9 A
    mcasp = &MCASP_MODULE_1;1 b: M" E& i* z' T0 ]
    mcasp->regs->GBLCTL  = 0;       // Reset9 Q2 x; w8 d7 u9 s6 O4 _! d; ]
    mcasp->regs->RGBLCTL = 0;       // Reset RX
' r0 H$ n  d/ ]2 D3 e5 W2 b% O    mcasp->regs->XGBLCTL = 0;       // Reset TX
. T7 U5 ^, S; Y* c8 X! h    mcasp->regs->PWRDEMU = 1;       // Free-running
6 S: `7 F5 P) ~   // configure McASP0 receive registers8 }7 G& r. ?: ~: F
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
& e0 `/ R  r9 `: X    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
  {$ d0 c4 ^- ]1 t8 n: o    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 i: x- J% W) _    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)7 K  \% E" x7 v2 Y) C- r% z3 t
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
8 S4 k( ?9 a& l, h    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
/ R' T* {1 p; a    mcasp->regs->RINTCTL    = 0x00000000; // Not used; E1 Q2 J3 o9 G$ C' H, I2 k
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% `( S$ t" y( g) H9 v8 F$ ~. A: o+ o3 n/ {- F0 z  U
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used1 Q/ Q& s+ _( g3 q
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" l2 P  B7 l- ?) s( ~% a8 K7 @
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word6 O" v4 k4 }$ G3 d
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-169 X0 G6 d3 J( I/ N( s
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK; Z) ]) m4 X4 {; G; }0 X$ M
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
7 ~+ N- s+ K, Z& R# U    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit' Q: X/ R( u* Q
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256. e9 q8 `/ N/ H- C+ i
- y+ e1 a/ u' S
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN  D5 F* ^8 q. L+ J0 I
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT+ O4 ]- F0 `' u0 F7 p5 T( V) f+ [
    mcasp->regs->PFUNC      = 0;          // All MCASPs
& q+ p9 Z! v& {# Q+ t7 F. ]: \    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1# J0 k: [: V, j" s" f

+ H& W, r# H- x( n/ R2 g' S4 u    mcasp->regs->DITCTL     = 0x00000000; // Not used
( |1 G- d* u% T; W    mcasp->regs->DLBCTL     = 0x00000000; // Not used) t$ O* j5 s9 h. T) x' N
    mcasp->regs->AMUTE      = 0x00000000; // Not used: i" U- [2 ^5 @' e5 Y0 _
0 f6 Z7 @, [8 O; V. n4 E6 e
/* Starting sections of the McASP*/
2 F! I- i  E: q) I7 Y% S. {    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
! l" k0 C0 E$ Z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
" \& K) {: N+ A5 ]$ L: O1 F    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; % t3 ~) Q& c) Y0 s6 `
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
. r1 x( D7 x7 ]6 X! a$ [. D2 a- P9 Y6 [/ _/ a5 A
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 6 t  Z0 J1 \. r( R  B1 N0 X
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
# Y: e( S' s$ K6 z* |) p    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
" }' S; z, z/ a9 R4 L* X4 J    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );' i+ U" T* Z% }

" i" G9 W7 F1 s8 D. D    mcasp->regs->XSTAT = 0x0000ffff; : A: f2 Q, F. j: b# t9 X
    mcasp->regs->RSTAT = 0x0000ffff;
( n4 m. X/ t, E; o2 k. K7 z! i8 q1 A. Y2 b
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;3 X. n& \  N( ?. m0 ^9 O4 [
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
6 v# b, `/ \+ U' {- S    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
7 k  u0 B1 [  R    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );9 `! L$ e" m! {2 V

7 h: C9 g# n7 B! l, o2 ~5 q! }    /* Write a 0, so that no underrun occurs after releasing the state machine */9 A& c) M+ Y6 j' m2 k( Y+ A
    mcasp->regs->XBUF5 = 0;
) G) R# e3 @" f8 j3 N, d" \, w    mcasp->regs->RBUF0 = 0;6 d( Y+ D- w3 M2 N
3 m1 b8 R3 z3 |/ u1 V% y
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ! Z* D. T7 J! g0 H0 A' L# d5 b
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
; f) S& F( ~+ T8 d+ F+ {7 [    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 8 ?# k% j( z  g( y9 G% N
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
6 z# w& r* y& D* s( E- g6 K' w0 ]+ k( K' v# d
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 2 E4 b7 q* j* N; d: M" w
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );% J! \' b) y) L8 C, `* k, g; u  o2 h1 K
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
# `, \6 ?& ~" z) H- g% K7 h    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );6 m6 d) ?  }% k6 T

3 Z5 o! N3 p  K( Z4 K/ b3 B' }4 ?8 ]    CSR = 0x0000;% x/ K0 ~6 ?+ Q) K9 v2 A. K
    INTC_INTMUX1 = 0x3d;6 _. {( F' S$ j2 L; u) t
    ISTP = (unsigned int)vectors;
* x- k6 S6 s0 D- n& r( R8 L    ICR = 0xFFF0;  
- T% B* [+ R0 g) N; W& F    IER |= 0x12;  
+ s# j3 ^0 s. q: }+ e4 R4 R; K    CSR |= 0x01;  ; O, H" _9 Y9 v
, O: [2 `# H7 ^4 W1 q

- F7 x+ W, }- B. P  p; y+ q1 e; p
+ o+ S  O, w: U还有就是两个输入输出函数:2 @* y# O$ l% b7 i
void output_sample(Int32 out_data)* G) X* s- M( Y! {
{+ j! b. d2 ?6 r# S
  AIC31_data.uint = out_data;  2 c1 i& t6 x% ~, N/ |; `
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
  [, p. j% d8 h$ \. ?) q$ y}: t- a& l) y- T& I' {1 S7 y5 e! G
, [% G& X$ x% R0 t% ~, d- {
Int32 input_sample(void)" Q2 E. M! Y4 S6 ~
{  8 s: ?+ t/ U& v: [- {
  AIC31_data.uint = MCASP1_RBUF0_32BIT;: `/ U1 H' p; C
  return (AIC31_data.uint);
: x2 E. [# q3 l5 ~" i, ]" z}* y+ Q0 L4 g! S% F3 d9 z. {
+ B( Z/ f) F7 P! }- k( X
分享到:  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-2-3 08:38 , Processed in 0.052422 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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