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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
* x% ?( N, e7 O3 p& b- `& imain文件:
: E* y8 Q6 a% B/ N' G' E8 {- ninterrupt void interrupt4(void)  
3 `, P' X( D8 l; O" E{. D$ {+ X/ D. Q/ g
  Uint32 sample;' S" Q; }; i4 |/ e3 w  L* S+ o
/ y1 g# d1 {7 G% I. j& U- m7 g
  sample = input_sample(); // read L + R samples from ADC# I, s6 ]3 c% U( O
  output_sample(sample);   // write L + R samples to DAC
4 B; x  |9 @% b) H5 }% ?  return;: r- E- ~4 |4 ~* m8 r' Y3 m- F
}
# b/ v& I* d) j, j1 X" H; H$ Y4 e( Q4 s5 ?3 g, k
int main( void )
3 o: [8 [& i/ {" ]  _{/ V4 b& b1 q& p# V5 S0 j

" h& G; s5 U0 ]* u5 e, N    /* Initialize BSL */) u0 A/ V9 a6 V' c! F7 Y: C7 e
    EVMC6747_init( );
& l/ F# K7 z! ?        /* Call evmc6747_intr function */2 D: g9 P  K  e, z6 r( R/ n+ B( G( Z2 K
    aic3106_init( );) U1 e, K% x$ k" K
        while(1);
4 X" w1 G* R, ~# F2 X}$ q3 l3 b2 `! s+ Y6 P
. l7 F2 z- t: J9 A9 ~3 [

1 J. k; g7 V  Caic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
  [- \0 l8 y) n* t9 x3 E/* Initialize MCASP1 */7 v- ~3 j+ P$ s% N8 a" Q
    mcasp = &MCASP_MODULE_1;
9 {& }% [  ^3 K, }; p0 [6 R: U9 F    mcasp->regs->GBLCTL  = 0;       // Reset
* a+ I- l6 o- r0 e/ r, `    mcasp->regs->RGBLCTL = 0;       // Reset RX  h5 Y. C' B' w. V" c  E( O
    mcasp->regs->XGBLCTL = 0;       // Reset TX
0 S" J3 k- M& H, [$ ~4 V    mcasp->regs->PWRDEMU = 1;       // Free-running
  o( {$ S( |8 A: p   // configure McASP0 receive registers+ K% @& }, i- e. M  C' \
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
3 X8 r9 A. g( [    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. P9 U5 Q+ t$ h  F' j    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word- ?4 F/ G& Z4 u
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)/ v* p* w, c/ I
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
1 O! ~# l1 |! G% ^7 b' v/ G    mcasp->regs->RTDM       = 0x00000003; // Slots 0,18 {3 Q* L* x" ^6 x) x6 A9 x
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
6 x$ B/ z7 S/ H9 i5 m  k$ r    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( R2 J- p; r0 q
0 C) V/ j( f' |4 F  K0 d3 t    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
0 ?+ ^" w, r' ^# m! q    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 ^/ Q$ y+ a) h0 C8 `) ~
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word  U; S7 v0 Y+ t( V* l8 `; B3 U
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
) c1 y& g9 _9 [2 [% y    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK2 A1 ?; b9 l% W
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1# V! q2 e: ^0 n2 r' ~3 n2 z3 B
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
; ]  _5 i+ `6 e- ?# X0 G1 M8 G    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% h( q% G2 \( @8 g. H* P8 l! s# D

0 J! q, H% v/ L- E. Y    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
5 B2 A& Z+ Y/ ~4 ]- T- ^    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT3 |% p$ k2 \# o) e% b( s
    mcasp->regs->PFUNC      = 0;          // All MCASPs
: ]3 v( k* m# D4 b: L    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX13 F/ e, J& @, m

" x, r: U6 t# e7 y# `- n    mcasp->regs->DITCTL     = 0x00000000; // Not used
+ {' M- g9 X: g0 o4 w2 g" j7 c    mcasp->regs->DLBCTL     = 0x00000000; // Not used
% N  u% o) M& |: g- D2 E2 L) @! z    mcasp->regs->AMUTE      = 0x00000000; // Not used2 \" O% L% J. z6 }4 i- _

, x, ?9 Z  e: _( Y1 N/* Starting sections of the McASP*/
  D  q; C4 |7 y& ?7 o/ T# B# S* S    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ; _! u+ E$ s6 o
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  + C' g. a) l4 i
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 4 O9 a" W0 F1 O/ V! N
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );' }$ T! y: P  m* z7 H7 g5 D

5 {; ^+ L( S  T8 ~: C8 F    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ' _1 u. `" e) q  a+ ^
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
2 I; x$ d/ s% X1 ]" K, W; }    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; . n4 r0 P! I- E; c
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );2 m/ o2 A( m, `7 u3 Z% U
8 P) |, z1 B. ~4 {5 @
    mcasp->regs->XSTAT = 0x0000ffff; " x( T$ U: H6 G& }5 [7 O
    mcasp->regs->RSTAT = 0x0000ffff; ) x6 q, Q7 x9 m$ B9 Z
3 [9 }* m; B, r6 V3 g' R1 t
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;0 D+ W- o2 D. U7 o
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
  C' D5 W  Q% @9 ~    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ; Q2 W3 ~- ^4 `+ A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
; C& g* ]" W$ e6 q1 [- g) J- M6 T' A* }* ]4 d) i- H5 G! O
    /* Write a 0, so that no underrun occurs after releasing the state machine */
/ ]; @$ J9 G% T+ ^' Y% P$ W( h5 ^. t    mcasp->regs->XBUF5 = 0;
: p/ e+ {9 k" G6 J$ y' l1 ^    mcasp->regs->RBUF0 = 0;
. v. Z8 K1 H! d' ?4 i/ f6 `7 I8 i: {7 `% T- J2 B! z/ f
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 A: w! ^- J7 q. k4 r    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );' f6 ]5 e# q9 S9 x& E
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
6 K# S7 l6 x& w: k% l2 V! w1 e    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );$ N6 o" i) r( y6 v  i
- E" s8 R& v6 J
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
; @7 H% ^5 M" c+ \, z' F    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
% r0 H+ O7 o5 I& y! S    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
; J$ k: X# {6 e: m/ }* n. {6 M    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# R: O6 H9 f9 i+ q* z6 t, O
: s% v* q4 V0 [0 U) ^& p    CSR = 0x0000;
$ L9 H5 U: t: Q) ~    INTC_INTMUX1 = 0x3d;
6 H+ e8 x+ m0 ]( t  ?4 Q) X# h1 ^! `    ISTP = (unsigned int)vectors;+ d2 R% H5 i* k" j8 C
    ICR = 0xFFF0;  
% S  r% S( m+ [. N( b2 `+ z    IER |= 0x12;  # }; [6 `! r( V& F, {/ z+ j% q. e6 R1 S
    CSR |= 0x01;  ! g7 p  R7 r, C' y% f) H" H
* s+ }0 c' L9 _1 \
* z1 D5 m4 S) _3 P- t
& O, y) K$ \( t# k
还有就是两个输入输出函数:
- `8 J! \/ Y  o. Y2 i9 r% R4 lvoid output_sample(Int32 out_data)- l+ S% d7 p2 A) M
{
2 h9 [# A% @0 J: M  AIC31_data.uint = out_data;  8 ?, L% J3 a, f( l" F
  MCASP1_XBUF5_32BIT = AIC31_data.uint;* x% e% ^1 \0 Z- N9 X
}
- h$ X" F( p% X( p  [  X, C9 x
0 ]& ]0 w6 \2 T% w4 N/ I, }' QInt32 input_sample(void)
3 t0 }. A- V! A+ j) a2 ~! ?{  + c9 J+ q3 p5 ~5 R6 n' ?: _
  AIC31_data.uint = MCASP1_RBUF0_32BIT;: l9 q/ Z! E6 U2 b8 Q* L/ Y
  return (AIC31_data.uint);
4 y/ z9 _8 U# C8 {/ V2 e# {3 j}3 E+ k) @3 p' y" m5 k: e) B! x

/ Z: U+ R9 D2 k! z% B
分享到:  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-11-27 19:58 , Processed in 0.039460 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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