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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
6 T9 g/ m; y9 z# \main文件:: j. S9 ]( e; Q8 O  ]
interrupt void interrupt4(void)  6 C+ V# \7 j; O% m0 ?) ~; w+ ~
{% b6 H$ ~0 j4 u& f5 j2 \* G
  Uint32 sample;
* W1 d* s# }0 z8 e( r) g6 Z+ r1 I: M4 e8 L1 {/ g$ P: D! `: V2 z2 ]
  sample = input_sample(); // read L + R samples from ADC4 B# c0 C4 S/ ~9 [0 f6 j5 z& E
  output_sample(sample);   // write L + R samples to DAC
" I' |5 T; f/ Z) t& s' z" P0 f& C  return;
+ J1 n, l0 M, I0 O5 a}
  D1 D' U) K9 B" K( e$ h# C* I
4 p, s# D5 o% {: jint main( void )  V: D8 z  ]5 S9 e4 k0 ]6 a
{
' t: G% b2 |  m: D3 J" i; l  i4 K1 @
4 ^9 B/ V3 A0 P0 f- q- ~% Y    /* Initialize BSL */
3 }) [' a% m: [4 G" I* H* N4 D& r    EVMC6747_init( );% T$ |9 _5 V- z' {% ?
        /* Call evmc6747_intr function */
# ^* y# V) [: w4 j/ a6 j( N# ]+ L0 v    aic3106_init( );8 V8 S4 o1 E" u8 F. a; `
        while(1);
9 a! Y/ E: m/ {}* q* |. i% e' H- z

4 E- y# W3 J& K2 \. @, T+ y  G1 v1 t" l! y) z. i
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
9 `3 t9 {( p# c( X! e$ b  ?% v/* Initialize MCASP1 */  B# @3 O) h  r# [+ O5 Y0 F
    mcasp = &MCASP_MODULE_1;9 M: R* i# m2 G
    mcasp->regs->GBLCTL  = 0;       // Reset: l7 y, v. \3 T; z. B
    mcasp->regs->RGBLCTL = 0;       // Reset RX
0 X& I8 p: m% J( U! h1 V+ {! [    mcasp->regs->XGBLCTL = 0;       // Reset TX& O" W9 v# M5 }: ?9 {5 O
    mcasp->regs->PWRDEMU = 1;       // Free-running
( _: ?' w0 q$ x6 k   // configure McASP0 receive registers
, Z7 b1 g6 H  u8 p' k    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
4 ?7 o. T; l6 M8 Y4 N. @) S: o    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! l8 E/ l+ ~5 k
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word# T% v7 ]! b7 C) T
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
9 {/ W9 J# G1 S5 e    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
5 o, H- Q* f6 O3 J3 c. h    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
9 \4 k: P- l( _: |  y2 V; Q6 A    mcasp->regs->RINTCTL    = 0x00000000; // Not used
  Y- F' q, U2 ^    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 K5 q2 y( J0 }" x2 T

- U0 A' D, U; D+ ?# B: F. o    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
( @7 ^) x  T! }7 C4 }/ t    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. O$ i8 P6 I1 `- u/ _
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word$ z9 I* S2 ^  |7 H8 J; w
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16& P5 t7 @3 p0 D
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK: C7 P* i! Q  E4 p; O
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,17 |  n# u0 N' l+ T
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit7 _& u, _: N0 Y. D" @: s
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- W9 C; q4 a$ S* I, U+ d
- R0 B- a  B' A6 t' w$ j    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
9 ^7 q- `6 q0 A- v  H3 C; |    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
$ g+ j9 Z! b/ f  C  ^! n, H    mcasp->regs->PFUNC      = 0;          // All MCASPs
6 q8 d) j1 y7 V/ H' x* c    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
7 k! F8 y* C: R+ {& d: {( D: w( T4 r. n
    mcasp->regs->DITCTL     = 0x00000000; // Not used% o9 f3 [: v! Y# p( \' z1 A
    mcasp->regs->DLBCTL     = 0x00000000; // Not used- V- E8 n  a* s
    mcasp->regs->AMUTE      = 0x00000000; // Not used& c8 c5 `  b! f$ W8 _
6 \2 Q4 h( n- U7 M" e
/* Starting sections of the McASP*/
5 e4 o& [/ n* d8 e) r3 |    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
! ^) w4 x" Q. K6 o, j- ]" N    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
* d/ q' P0 O, {4 O    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ! O) K" A8 Y. A: I. V/ h
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );( M( y* x3 i- {$ w+ Q

/ ]  j6 o4 c$ C; z    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
2 I7 S. A" _) N/ A3 q- E    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );+ O# J1 I7 z# H; `6 \* C. t
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ' o) ^+ a0 @% V/ N& P
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
8 f- {; B: F9 c5 S# k
$ i  y( T3 N2 T5 f: F8 b    mcasp->regs->XSTAT = 0x0000ffff; - U% A. N4 t) I
    mcasp->regs->RSTAT = 0x0000ffff;
: q# X& }5 e, M3 R
  `  h! U0 {3 @9 P6 p7 j0 J    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;+ ~0 P( |. M7 x( _: ?$ x' V
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );% _8 W% o7 \6 S% L! o
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 H: Z6 g; _$ e1 F
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );* o4 L# c3 ~5 @6 ?- T
. ~7 Z- I6 N7 S8 W0 _+ X% K: C
    /* Write a 0, so that no underrun occurs after releasing the state machine *// m8 h, o0 q" U- f- c, }
    mcasp->regs->XBUF5 = 0;
  ]' y0 N- {+ ?1 u0 b7 P6 F* o1 t    mcasp->regs->RBUF0 = 0;
$ L6 K( E  @5 R  G( ]. Z; A- Y" }# y' ?5 g! u+ F+ }) s; i! q. M
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
" |( L; `$ ^: g  o) w    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
. }# X- }6 p9 x& A: k% i/ x5 {    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ' W. _) t, A) x5 Q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
+ h) V. a' K5 g" F9 [2 @/ j7 E) I1 d  G* ^/ I
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; + f$ B0 f% u# M# w
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );0 _& @6 p3 `% I, t+ t/ R1 N9 ]: l
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
2 d( U# Q- ?8 B8 r    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );9 u6 j  k( F+ I. y/ ^& a

5 v8 O: X1 Z# V" d    CSR = 0x0000;' N+ |$ J" D9 z+ @6 F% j
    INTC_INTMUX1 = 0x3d;, n& G' Q  J9 t' d  ^
    ISTP = (unsigned int)vectors;) K- g$ r6 G, y( K
    ICR = 0xFFF0;  
& U3 k2 m2 e$ Y! r5 `$ ]+ |0 i    IER |= 0x12;  4 t! t. M8 A5 J- f/ G
    CSR |= 0x01;  
" L7 v8 R  o0 L* u; G* D
8 n1 R3 Z$ u( n% v
! G5 y  \9 i, c6 z/ M
8 U& g2 y0 H( I" D/ M还有就是两个输入输出函数:
# v7 @; a% A; k; @$ T+ ~void output_sample(Int32 out_data)( ?* a7 N" e, |4 f$ X' F
{
. Q5 E: z$ L0 m" ~0 X) e2 n# r  AIC31_data.uint = out_data;  
& P; I3 y% \; D5 {5 Z. S5 k! z0 b  MCASP1_XBUF5_32BIT = AIC31_data.uint;
9 v7 l( ^5 n; a  e4 H}2 }7 C8 I2 T, f

4 ]3 R) U" f4 s# L  ?Int32 input_sample(void)" [) {% i- r6 P3 `- Q
{    ?2 l; K4 Y( X2 G
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
; h9 Z! _# W0 J/ @0 M2 \  return (AIC31_data.uint);
. i8 g& R- }* {}
+ D" {2 O/ ?) ], |/ Z: t  y- ^  r! y1 I, w& S3 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, 2026-1-16 19:08 , Processed in 0.041865 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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