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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
4 Y5 E" f2 `3 Z' ]% Tmain文件:, `# S; R  o3 {
interrupt void interrupt4(void)  3 m& Y+ k6 V# q. K$ ?/ `
{$ r' U- b& r, g* P0 a+ v4 \
  Uint32 sample;( }' J; c: g3 i  f
( t5 h* Y0 i. P9 u  M* x
  sample = input_sample(); // read L + R samples from ADC( K& w% {* m. S3 N  i* q- o6 k! m
  output_sample(sample);   // write L + R samples to DAC
; i: i! M% q: N  return;
7 A* z" `  l- t$ P+ j}4 w3 B: s( I; J

$ Z# F1 x# F1 w% V  ~) u  b( u* \int main( void )8 ^2 l; q4 x, @+ I0 C, B5 I8 M6 w8 i
{
: G5 a2 ~0 v! P! N
4 A7 Z$ u: D( `, n" l1 m& H& K    /* Initialize BSL */
; g0 K* I* ^2 H. u' u    EVMC6747_init( );1 g# l  p( ~9 P* v
        /* Call evmc6747_intr function */
7 u$ x: g8 S1 ^( C/ a: b: _7 u    aic3106_init( );
1 }7 @8 k& I8 H! R- n) q        while(1);7 |& e/ \" v6 Z! H4 B* S
}
, ~3 k1 e7 d2 }
, O- |  }5 X5 p: ~# n* r/ Q, r$ }9 f4 q8 u
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
2 j# q! o6 o9 }) a/* Initialize MCASP1 */
5 o& }, Q, W8 J/ x    mcasp = &MCASP_MODULE_1;
! _7 J* P! E! H! Z6 @; E# r    mcasp->regs->GBLCTL  = 0;       // Reset
* @" r5 [% h. [2 T! w& ~    mcasp->regs->RGBLCTL = 0;       // Reset RX7 P+ W9 s/ v/ @7 i7 N5 x
    mcasp->regs->XGBLCTL = 0;       // Reset TX2 c5 m2 S: x% b
    mcasp->regs->PWRDEMU = 1;       // Free-running
: A) l& b) e/ z' c1 i; I3 A   // configure McASP0 receive registers
5 X+ m/ ~4 _6 x0 }; B    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used$ t& O6 e0 U3 ?& z: P: p9 U
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 j. u7 t7 W+ ~) r8 y    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
& T8 X- L1 B5 }( ~0 @! C    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
' f( q0 v, l7 x+ \4 T, V    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
8 F+ H7 l6 h9 C4 s5 y( N. R# S    mcasp->regs->RTDM       = 0x00000003; // Slots 0,12 x( h" u9 E: m' M' @
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
: i0 G' [4 I! j, o, m    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
$ P( f/ ]; i/ \0 Z) r0 q
* O" \* p: u1 D: q. L    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used9 [6 V% j1 [: i  J! r- z; T
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 ]6 N' m* O* N& S- e6 [
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word* Z4 |. h5 J% h0 o: a: S, m
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16. Z+ Y% ]$ o& V( S2 L1 n
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK0 B" V5 l& e* F+ h; L( h- Z' |
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
. r, _9 J' |3 q/ G    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
, m& s! |9 m3 P" }5 `8 w8 |2 ]    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 {' I$ A1 L( z4 k/ w, ~, f- m
1 E$ a! p" B! d- q' I2 o    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
5 h' ]1 k1 B+ k8 N2 a- {5 ?# n    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT& w! K6 ~* }0 s
    mcasp->regs->PFUNC      = 0;          // All MCASPs: k5 x  f, w/ B0 ?5 d
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
2 u4 i0 q! Q4 u- g  h
" l, F6 n+ L( c& t0 ]    mcasp->regs->DITCTL     = 0x00000000; // Not used
  k3 `. n, t7 Y3 c0 ]* Q; r    mcasp->regs->DLBCTL     = 0x00000000; // Not used# ?2 }0 ~" V1 {3 A
    mcasp->regs->AMUTE      = 0x00000000; // Not used( l. Q, q' L- y7 t- {, q) O
0 d. T& }8 W* q& S7 x
/* Starting sections of the McASP*/+ ?6 o0 m4 z$ u, ]
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
# ^& u$ F6 p7 S1 C    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  6 o8 F4 Q. \4 w# K6 w
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ( k  u0 [1 F9 _* J
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
  M+ f3 c3 X9 m* _, q, W+ ?6 f/ l  @3 ^' p6 J5 G
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
. |3 U% o) C9 w6 s/ p2 V# u    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
6 k! P/ A. ^/ y* ^+ ~    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
- u! w: y+ V; y6 C' }. M2 q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
2 Q7 k/ r% V- z( m, h( T8 G! M2 J$ q$ p$ N
    mcasp->regs->XSTAT = 0x0000ffff; 6 V! q" c  K+ i
    mcasp->regs->RSTAT = 0x0000ffff; 9 N3 @$ w- @: }0 [% f

( f2 b% U$ ^/ l8 W  @% A& ~. J; _9 B    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
7 O" P( Y" {% A, k+ X    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );# \" ]/ O$ b' o/ o
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
/ c  Y8 \$ P0 m' h/ s2 {    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
6 G$ z; q/ I& L! @
. C6 R  _) K) p1 I6 _    /* Write a 0, so that no underrun occurs after releasing the state machine */! e- |9 X1 |/ b  o* i7 o; C4 ]+ H
    mcasp->regs->XBUF5 = 0;+ t% g. a# e8 f0 ?; J2 h
    mcasp->regs->RBUF0 = 0;7 o: w5 w. x, u0 g
7 _# S: B# |, A- B( R- j: a
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 8 U& m0 p5 W' B8 [5 A/ N
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
1 x2 I7 w; v$ [. L' A( |    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; + V1 u. N1 c5 ?  e$ L! T
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );( h' ?# G- W9 W. Q" m, K

8 O' h5 G3 g, x" N    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
  B. c- t) i8 x5 Y3 f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
3 b: s' `4 z' e$ S    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 5 c" C0 B7 D9 z0 y) R& U
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );! S$ o5 v1 `8 `. C8 |

7 n0 H* I/ R8 |. P  n$ P) a    CSR = 0x0000;
' r; e. l3 ^9 o! m    INTC_INTMUX1 = 0x3d;
  ^+ E  c* F! v1 R    ISTP = (unsigned int)vectors;
9 ~: Y3 H) L" ^/ ?. G$ Q1 C    ICR = 0xFFF0;  5 c8 b# }: o8 V3 w; k" l! {
    IER |= 0x12;  
/ h, a, f+ s  g; ]' Y  F7 U# G& h/ _    CSR |= 0x01;  
* t' C7 ~: o0 X9 k8 E& a; n9 s% x
0 _% w7 L1 t' U, |, `4 i4 u( O# h7 Q+ A6 i  U
# l! b0 o( D" e7 s* @. K
还有就是两个输入输出函数:( Z2 l9 \9 W0 n0 z3 L. d# i+ G, |. p3 X
void output_sample(Int32 out_data): J* Q2 V4 p) A( U: j
{
- x8 [% N1 e& _6 b1 Z* @  AIC31_data.uint = out_data;  ! U* v9 T' ]( B1 E* b1 C
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
) [( F) {7 N, z* ?! c% g  S}# [, ]! t2 B, f: I
: f5 y7 o: ~) x4 L# {0 r/ @6 u
Int32 input_sample(void)0 v1 O* b2 `" r9 R  \
{  
3 ^, q: A. q: D6 G, B! K0 y  AIC31_data.uint = MCASP1_RBUF0_32BIT;
: Q- V5 d) u8 D% C, K  N6 Q  return (AIC31_data.uint);
8 ~; i9 ^% A# q7 Z) n( L0 e}
0 J0 Z* q4 n  z- z* [6 F4 E  J- Z- z  M; I% n) }
分享到:  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-13 20:25 , Processed in 0.042873 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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