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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:7 [  v! ^7 L: M
main文件:2 a' R& Q1 a2 R5 M  Y! V
interrupt void interrupt4(void)  
: a$ R. V" Y. C( z- `. f{# ~4 T! U1 d. [4 H1 h* X& M
  Uint32 sample;
$ U& A7 v5 F7 j8 ^. ~
, B2 d" P: l* I# @  sample = input_sample(); // read L + R samples from ADC
5 \  C- F. v7 j, m  output_sample(sample);   // write L + R samples to DAC ( [5 ^+ w) B& |' A+ X* I
  return;
" ~  A( n8 L; c3 N$ U}
& T" J0 ^- P( J1 m3 w* L6 i3 I
& G. w8 d* G# i, V, `int main( void )7 p% z9 s* W: z# B; X
{
, _9 m, e& x0 c8 ]4 \& Y/ U) [% ~5 ?0 h  K% ~) x
    /* Initialize BSL */- h! u1 i& F: y% @/ A+ Q- R( d. |
    EVMC6747_init( );" b  M: }: C2 m8 ^' g4 R
        /* Call evmc6747_intr function */
" u8 j: B( o  Z# ~/ C- ~; M* O. E0 w    aic3106_init( );
7 m( C+ ]  M2 C. k" |7 w  |0 h        while(1);& R6 a% W+ c; S' D+ G
}
$ T1 N, N" T% [+ N; A" _6 D7 Z$ V3 L' |/ Y% b; X

7 X- n+ G( r' S8 R- [2 L: Vaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题  M0 D. @$ d$ b$ U( N! R
/* Initialize MCASP1 */
& {2 d( A0 Z! @/ g* L1 ]' X4 J    mcasp = &MCASP_MODULE_1;# m) L( c8 d- S4 A  C7 X
    mcasp->regs->GBLCTL  = 0;       // Reset- E" }* D  C- q. z
    mcasp->regs->RGBLCTL = 0;       // Reset RX2 H5 o: F6 z$ {- p
    mcasp->regs->XGBLCTL = 0;       // Reset TX
. b- m) j  D6 W( z* A) z    mcasp->regs->PWRDEMU = 1;       // Free-running5 P0 U' e- ?7 d9 r6 m
   // configure McASP0 receive registers3 W" v, r3 L1 i+ N. b$ G5 ^! o
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used# ^, E) d/ Y1 q& o% i
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus; R6 o! k' x% J3 Q4 Y
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
' `" J" [8 E, Z, M- O    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
6 Q5 ]7 d) E+ j0 z5 L, y+ n3 F    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)! Y$ X. O, x% W- A( }( Q
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
5 k  j# s* t5 ~: ^: V    mcasp->regs->RINTCTL    = 0x00000000; // Not used& c! Q+ u( o7 _6 k! I- n) V
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 Y+ _+ d4 P# \2 {
7 ?3 j+ r3 p2 _7 M; q* ]
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used, ^6 Y9 s" O5 c- p
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus( M! u' I3 |: X
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word1 o) ^, ~& I& {- \. ]9 M
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16; D. n" M& b% g1 W" E/ g6 l' i
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK  t# i3 d% s; }2 e. A
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
/ u; e. ?: A: `7 L# s- {    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit& @$ j2 _  D2 L( Y* D2 Q0 n
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! v: T, \8 Q/ D& ~- H# T
0 B! d4 r8 S9 D" J0 f: u3 F2 g    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
. w# z' u% |- Y' i: Z  s1 p+ y, t% o* g  P    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
+ {$ W: L( Q$ A    mcasp->regs->PFUNC      = 0;          // All MCASPs
6 d/ n, R4 m! t4 \% Z! R7 _    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
' S* ~$ l1 o& G0 k- I1 l  J. }, U% f& _0 h* @
    mcasp->regs->DITCTL     = 0x00000000; // Not used  |6 F2 w# N6 J0 b4 R; y& I/ W5 J
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
! N3 V% I  T, T/ n( Z  |2 s2 G    mcasp->regs->AMUTE      = 0x00000000; // Not used
2 Y& W5 b0 O2 W! c
- a7 u, i4 l% C4 O% C! X9 i1 n" m. D& b/* Starting sections of the McASP*/
, x% m& b, i1 i. _    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
  n6 C" k3 s- K/ a8 Q6 _7 P2 V    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
+ F$ K1 I0 D4 w4 T! l    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; - _0 Z/ z0 w5 o3 q+ ^7 L7 u5 v' g
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
2 ?( P  Y7 Q; U* g
, |8 j; P3 D. S, x    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; $ [/ x2 F  ~4 F4 R8 d
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );  _4 r  C5 f* \
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
) A0 T! I" d( a5 Q0 _1 N    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );1 E* c9 S* J* ]8 E. s0 B2 a3 I
9 k; f/ T- o5 a9 K4 W4 N" Y
    mcasp->regs->XSTAT = 0x0000ffff; 9 Y" A2 i: U2 F0 g6 O- W2 J# d
    mcasp->regs->RSTAT = 0x0000ffff; 5 V5 I% @9 k' M$ Y3 W% w

5 |* [/ c! n1 r2 x- `* U) D$ N    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
  F& ^; J3 {' }2 B% D" @    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );: d1 w8 U) J# ]" E  e0 q6 _
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 4 A2 A5 E6 S5 p# T7 g
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% N$ N4 Y6 k/ Y8 y2 v
* e+ T3 P1 T3 o3 u3 a% ]# T( Y    /* Write a 0, so that no underrun occurs after releasing the state machine */! ]; R/ E/ O, L  f3 G& O5 u# ?2 T
    mcasp->regs->XBUF5 = 0;$ f! z2 B# V8 h% Y# D
    mcasp->regs->RBUF0 = 0;# o" S; _" _' ^1 B" B

3 B, r  q9 ]. O8 H9 F# U0 {% u2 P    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
) Q4 @1 ?8 [* s$ d+ p+ w. l- P    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );7 I3 W7 j4 X7 F# k2 |
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; , T2 _' M: i2 `* j
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
- D6 ^$ Q- e$ [7 {
  i) p9 O+ @2 `    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
; I1 I0 ]- O2 L. W7 C: z" F    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );/ X9 q' _1 D7 {3 _2 L0 i
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
6 k8 z  W/ s2 c5 C    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
( D1 F1 W. ?; M( z3 |6 E9 u$ y' |- E  n" i0 W
    CSR = 0x0000;  ]- C  x" k% G" [* o  x
    INTC_INTMUX1 = 0x3d;2 q4 h: d8 ?7 f0 Z% n  e* O$ H6 [
    ISTP = (unsigned int)vectors;
! f2 Q' D& Y  `( W    ICR = 0xFFF0;  ; M. |7 ^' V7 a5 U& g; R4 F; Q
    IER |= 0x12;  ; Y' o8 f" U5 U$ O) r
    CSR |= 0x01;  
' E, {3 r5 u$ @& C7 K4 t" J7 @/ V- s6 N  i" \

2 S" ^9 _% M0 z2 B  i7 r# w+ \3 A3 p8 y+ g& D
还有就是两个输入输出函数:2 n9 \9 u4 ^& ~- E4 u' }9 q- D
void output_sample(Int32 out_data)9 R* {2 ^( a! F2 y' h
{# N: ]" {. W1 g& C4 [6 b0 N" Q3 Y
  AIC31_data.uint = out_data;  1 w3 D5 q7 m8 b( g( n
  MCASP1_XBUF5_32BIT = AIC31_data.uint;, G) r/ ~- F5 e
}1 p; {7 M" J) L( q9 v) P2 `- g9 x

! ~1 O+ a# s# g: NInt32 input_sample(void)" q1 i/ ?4 n: e% U
{  $ ^2 M7 c8 i6 `; _; L  o1 S
  AIC31_data.uint = MCASP1_RBUF0_32BIT;0 E' u) h; q3 M( s
  return (AIC31_data.uint);
8 s% _' S  V- l, q}: L* t  _) o: h1 j# r/ T; m$ ]# K$ L
, u3 ?+ }- b) h* i9 J8 m- o& m8 C
分享到:  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-2-25 21:03 , Processed in 0.038799 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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