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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:; J9 G4 p* y4 @+ E( W
main文件:! Y! w5 o% e5 k) g% A" R3 h2 O  V
interrupt void interrupt4(void)  9 u+ @5 U" X7 C- L# v1 w, q
{
: [2 b0 |3 Q# Q! ?% X8 E1 W0 \  Uint32 sample;  F1 ^4 Q2 x$ x& o9 f

3 t% e# Q. s) M( Q$ m7 h5 @/ }  sample = input_sample(); // read L + R samples from ADC
& D: V$ f' E+ K- m  output_sample(sample);   // write L + R samples to DAC   m& @7 m: p; z" D8 p- H6 h) @
  return;
1 T9 p2 x! ]& y: L}
5 w7 c$ K' _% @  ?1 X+ I. J9 K3 L7 `
3 |% j% _! u8 \int main( void )
$ C& a6 \  a/ [7 ^{' f" ]3 p2 c, |$ z

: x; i( o0 V; s6 z9 }    /* Initialize BSL */  }' q& v- [- g, c2 I6 p/ h/ g7 h
    EVMC6747_init( );
$ v1 x* T9 a9 h        /* Call evmc6747_intr function */
; a  |$ U' d4 h: t: ~    aic3106_init( );
" P" X* u6 t$ z9 v/ b' f3 E        while(1);2 H7 L0 C6 A( P$ \# S' T) j
}
3 a1 y1 ^  U7 A2 u! ~5 E4 W! e/ x* @" Q8 @$ ?; }" y$ @' m* R
  y! J, _' c6 x0 F% U! ?3 b, D
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题9 L! [/ p0 ]/ T0 _! E, o$ T
/* Initialize MCASP1 */
2 g% D. Z+ Y* P3 l    mcasp = &MCASP_MODULE_1;
9 _4 i, ^. m, K/ o' `6 d. W9 q    mcasp->regs->GBLCTL  = 0;       // Reset2 m# A( e) l9 r. F
    mcasp->regs->RGBLCTL = 0;       // Reset RX% F" d* E0 _0 K6 k& q9 o$ K7 Q! L
    mcasp->regs->XGBLCTL = 0;       // Reset TX
- |" ~. V+ x, ?; }) Y' l5 ~    mcasp->regs->PWRDEMU = 1;       // Free-running) M, d& [* `/ \, j
   // configure McASP0 receive registers
5 p* J. r0 M% N0 e2 e# e; x; X) _: L    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
( w- D' l' z/ _. f& ^    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
: V. U8 T- Q& e" a: U1 G    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
: [, x( t! T; }0 u( @    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
! ~6 r1 N! y! q    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)+ v6 g3 \% d+ M6 H( r; N
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1$ ~+ P+ }; T4 r0 w2 l, c" L
    mcasp->regs->RINTCTL    = 0x00000000; // Not used( @, l8 |! }6 o0 Y  F' `
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 }6 F0 ^: ^5 {: ~6 T0 L/ Q& l" ~( C0 Y6 P" T0 W
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
& F* Q& X( c! {* Q8 a0 D    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus% e; C+ m; p! j% }
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word' k, l) d! D* T
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16$ [4 R& G" _4 T
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
& {9 X2 |( `0 p( O. i! a    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
/ |2 n+ B- C: D8 g* p    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
0 r$ a0 _$ a1 M' }1 |. K    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2563 w, c# I* x  B+ j

! {9 F( W% n  @* G3 h    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
: p# k8 p2 F# c( }* D' D    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
7 A( x/ d8 E; A& i8 ^5 h    mcasp->regs->PFUNC      = 0;          // All MCASPs
0 F$ ~5 }4 K  s6 T% n$ A- {    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
3 M; v0 Z. a# x) Q9 S* ]
- j, d! C' s, q% A  |    mcasp->regs->DITCTL     = 0x00000000; // Not used
0 @' s& y% F5 B* G0 R: t    mcasp->regs->DLBCTL     = 0x00000000; // Not used
! h7 J# h' X9 o4 @    mcasp->regs->AMUTE      = 0x00000000; // Not used' b# x( t- _3 V3 a1 X- c4 {
! p  N  @5 F- c' J/ M6 O* o3 B7 M
/* Starting sections of the McASP*/) \* c) W. t$ }3 u( C' ]
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; - V) E& `3 Q5 r6 }! {
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
3 D1 N  j( y* J; |  X    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; " o) U1 C7 j, Z; D
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );$ N: s' K: j8 |
) s- o' `5 t, t$ d
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
1 w' \$ P7 N5 m8 ?8 z5 ?: [    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );  h$ `$ ?+ O. N" o6 L, a) _4 E' z
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 6 n5 X" P$ a7 b  J% X0 K( q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );) e$ B* J7 T+ p1 l

1 s  d5 l; A4 Q; r; o    mcasp->regs->XSTAT = 0x0000ffff;
0 [( G( N* ^" d+ l5 [; d& z4 ~) ^5 C    mcasp->regs->RSTAT = 0x0000ffff; . m2 k$ P8 Y+ \" a. O

+ V( L* s, ~2 e0 s. O    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
9 K0 _5 V9 I2 _% ^$ b: c6 f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );/ [- P9 [* K* i. u1 b. t* D
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; # C, D+ g8 D8 l4 @, P2 a4 j: O
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
! _2 `4 u5 @" s! A, t4 J4 y- n% Z3 x3 I1 q" ~, }: L! h
    /* Write a 0, so that no underrun occurs after releasing the state machine */" v) {, U+ p& j' r5 W1 R1 ~; y
    mcasp->regs->XBUF5 = 0;
$ j. X4 q( B7 \) Z% K1 u+ I2 d    mcasp->regs->RBUF0 = 0;' ^- I# H& l* r" \
' B5 D( x9 h. ~; f$ t9 K4 ~5 o
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 5 s: e" D' t- k5 a0 @5 Y. H8 t# ]8 {
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );! @6 O7 h! w* }; Q. g! J' J
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
; R/ |1 ?, k" ?( x  [# `: j2 j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" U; h( P5 G) H8 P5 M! ^" [: {
8 c9 {9 t$ ]9 a) D
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
! d) }0 ]! m1 [2 p: ]7 A9 q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
  Y* i! q) q# h4 B, e    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
) u& l  s$ H$ l5 D2 W- w1 m2 z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );: Q0 C* ~' `7 h% N

. `4 t1 e. m& y5 N3 ]' T' k* }    CSR = 0x0000;- D; q. r0 i" r0 Z1 c
    INTC_INTMUX1 = 0x3d;$ c4 ]: B! k- ^
    ISTP = (unsigned int)vectors;
2 ~" f! {/ l" t( w8 M    ICR = 0xFFF0;  - K$ e1 P% ~, I
    IER |= 0x12;  3 L* ?6 E0 N! l; }5 S( W
    CSR |= 0x01;  8 n: p7 i4 O; ]; v( Z
3 ]3 }7 {9 |! ?2 E6 |

/ }0 x) U3 F& h8 z
2 P2 k0 x9 _, z还有就是两个输入输出函数:
+ L" s9 _) A$ W* Vvoid output_sample(Int32 out_data)
- e3 s! j2 R  P& ~$ k7 u5 {& z: i7 K: i{
" u* T* Z$ H6 I  AIC31_data.uint = out_data;  4 R5 k9 T7 _, K6 n  e9 P7 R' s
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
4 O# d5 u9 N' b% j3 ^& v6 Q}# _! C+ I3 s9 y9 i+ P
: O: J( m0 a; F( l! ^2 }
Int32 input_sample(void)
8 N5 X; g# S1 _# \/ ~' n  C{  & ^( ?& {. U$ l  ?1 F6 X$ t
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
4 ~" }$ _8 l4 r$ R# M  return (AIC31_data.uint);. \( R6 ]% M1 B, w& L6 M
}
" J7 n9 E: a' p5 Y  O) e, \* D0 X+ t1 ~0 M" l: K( N) W
分享到:  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-6 02:46 , Processed in 0.040733 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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