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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
' V7 E% S* k' imain文件:$ }: V# `; F0 N3 e7 W
interrupt void interrupt4(void)  
/ W2 N5 G9 f/ E( q{% m  [$ S( N4 z8 s; s: I! y2 Y, W
  Uint32 sample;$ @* y8 Z! u8 L* S5 [5 {6 S( x( G
5 W2 x1 S: c  c. O/ m1 P% z
  sample = input_sample(); // read L + R samples from ADC
$ x8 V* [# ~' s: V( v/ F  output_sample(sample);   // write L + R samples to DAC 9 T, D) t2 c  T; W3 ~1 h
  return;8 R- |2 c- C' z  U3 f- w
}
  @6 _% y# H8 _3 p2 `% ]: p1 w6 k$ {1 [' s! `+ Z- R& J+ X$ f2 R
int main( void )
; u, U5 v' {; l{
9 [( [( J1 P1 [3 S3 F6 v: w
5 w6 A5 M$ H) _2 I  R. O! J    /* Initialize BSL */
9 u; v8 B( \( i; ^0 O/ h    EVMC6747_init( );, Q5 }1 T" c) _
        /* Call evmc6747_intr function */
! ^* }3 ^( {2 a7 X    aic3106_init( );+ @, D% y9 ]) h8 i0 S, \
        while(1);4 J1 K, g( W& Q* U) b
}
: ]' K- p; c3 S) \/ ]2 j$ {8 c3 h6 U* D) P) j/ X/ W( S) e
* ^2 N' a( Q; S2 W8 c- y4 p
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题# i) m7 }! L* i& j
/* Initialize MCASP1 */
, ?1 @0 U/ y: z    mcasp = &MCASP_MODULE_1;
8 S( E" C' V1 f3 C; l/ k    mcasp->regs->GBLCTL  = 0;       // Reset( d# r4 `& V9 V
    mcasp->regs->RGBLCTL = 0;       // Reset RX
( y: V5 C# e6 j  G    mcasp->regs->XGBLCTL = 0;       // Reset TX
+ Y, n- M* c  C; r6 l& B    mcasp->regs->PWRDEMU = 1;       // Free-running
! Q' |3 ]( {- S2 k6 C7 [- J% |   // configure McASP0 receive registers
+ u9 L/ R. n- n; u2 r+ {6 t    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used: v- l% L& j' \5 l( J( U
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 l9 `" `' r6 v/ `8 @( j; u$ E
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
, H" r1 i* Z& |    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
6 l; Q2 D/ U4 I/ Y% r. I0 H    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
, b6 P! K1 h1 y7 {8 I% S% ]    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1# B' L% U0 x% Y$ M( c
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
* R# k4 u! W0 m9 H    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256+ f5 R0 ^. h* O4 X, G; J6 y; q& j

# h6 C' j" {8 |/ `) O/ m6 t    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
. S3 M$ ~; H) j0 T    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& S3 S6 @4 U6 L9 a+ @
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word  Y# H  y7 o5 t4 H2 |0 i
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
5 J$ K* j2 L  T0 N    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK( Q; {( D: d: F0 R+ h5 t
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,13 u4 k" w5 q' d% v7 P) i8 ?
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit% ]$ S, I% G) p& ~
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
4 E& R) t" w5 o7 {+ Z7 N. A% Z; _1 E. \3 S; X$ X
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN& q! l5 G: g, z( O2 V- \# B
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT; ~  H# ?. v1 h* X- A
    mcasp->regs->PFUNC      = 0;          // All MCASPs
5 ]; g- F  z: P! O    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1$ S# O* `  f& ^
( ?0 g8 r/ w6 r/ V" m* B+ k
    mcasp->regs->DITCTL     = 0x00000000; // Not used3 N# b3 j% U0 x1 r
    mcasp->regs->DLBCTL     = 0x00000000; // Not used3 g3 g" r7 `4 f$ J$ s$ A
    mcasp->regs->AMUTE      = 0x00000000; // Not used
4 z8 S0 a9 P6 o* _2 k# C2 R/ J  V6 F/ \5 V# j9 I9 W9 Z* T! a
/* Starting sections of the McASP*/
4 x; v& q# K; ?6 s4 j9 \+ T    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
* c! U5 a$ R' [$ m: O  {    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
0 ?) L. I- _& H2 ^; o2 q    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 9 N" Z9 Q- _) \, f- L
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );. t2 H' {. o+ r7 X

) V- w& b- Q, I; J5 o, c' l0 T    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;   |9 Q. l: A9 F; U
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );5 o2 p, w2 f" Y( I5 p  _% G
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; + A  D; k' W' z8 m* A0 v4 r
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );* I5 g; r* l5 B

1 {. \, L- t0 W0 p7 i    mcasp->regs->XSTAT = 0x0000ffff;
9 v" G; T! M# T0 g' V- H" u; x    mcasp->regs->RSTAT = 0x0000ffff; ! U4 p" ~: I7 b# a: L4 [

1 \2 N' [) U  r: z9 N# {    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;" s5 x( T# b/ ?8 p, x) k
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
$ N6 s  `- d( m/ h    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ; w$ j  f& v8 x
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );4 ?2 T$ e- D0 c; _8 Q
! ^! N' m- Z; o6 i; [( a4 C4 F  ^
    /* Write a 0, so that no underrun occurs after releasing the state machine */' B. v1 e6 P( }, ]! u' e
    mcasp->regs->XBUF5 = 0;9 O& H& |6 q% k1 ^8 _6 m; z7 K  O
    mcasp->regs->RBUF0 = 0;# I, w, f, w% R/ P: K" M

* A. O* ]- |, @5 o) D# U1 f) H$ ^& t    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
" |0 E1 D: M3 p+ w/ e( _. U/ l    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );5 Q( e' ?9 X( Q7 H1 [
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;   k) O$ E; s; _: \. `3 d
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
1 {) t( `# B- n9 r
+ q' b; U$ f; e2 a7 l    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 7 [) ?6 j+ b& d3 l+ o  M
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );, i1 `0 B. ?) }5 k! g
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
4 T! a  a% k% j% I! \6 F    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );% i( U* L8 g; X* K- w: H) p
: a1 x6 M, ?8 P. R' `
    CSR = 0x0000;' ]2 n8 e$ S0 q  E
    INTC_INTMUX1 = 0x3d;( k, q' v8 d; Q0 `
    ISTP = (unsigned int)vectors;( v7 Q9 m% @+ n
    ICR = 0xFFF0;  
5 a6 W, X& j( y    IER |= 0x12;  " B: ?0 D; m: A* X
    CSR |= 0x01;  $ Y( w: I* I# c) P5 j

7 \* G  P4 k5 Q- m0 L6 ]% X; t+ v! \7 r' O6 Y! U% U: [: q

3 {" R6 k4 o- \+ j! n7 x还有就是两个输入输出函数:, d5 U  l! e  b: x
void output_sample(Int32 out_data)
* u" J. l- q6 Y0 O8 o7 c4 f& n{! A1 V4 \  N! y' C. T7 q& P
  AIC31_data.uint = out_data;  * \- u' ]! q, q. ~% s$ a
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
$ Q7 u. i1 H, x& @6 t$ R! X}. ]3 Z. [) y# A

# S/ b* ?) m7 x# xInt32 input_sample(void)
+ f: @+ T, T6 u" f& x# u{  9 P0 W( D8 t5 Q( A% s0 S( N1 I9 o
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
2 u8 ?) i/ v' u8 U1 C  return (AIC31_data.uint);( p6 z6 ]7 ]) P4 t. v" `
}
" x! X" p4 Z6 U6 h/ F0 N: q/ D( F
2 M4 T0 F0 p  ?* _
分享到:  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-29 16:30 , Processed in 0.048178 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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