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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
& Y; p+ E( f5 O# z0 L/ O' s) Qmain文件:
8 ^# Z* e$ N; ^& F$ Einterrupt void interrupt4(void)  . I/ j  O" Z* T+ z" A* y
{
3 G3 c2 G- J7 O, B* A$ T  Uint32 sample;
4 p& p2 Y  Z, V3 X" X% s$ t. i% B; ]- P& O+ @2 ~% ^
  sample = input_sample(); // read L + R samples from ADC! i. ]- M* H! d4 e9 B
  output_sample(sample);   // write L + R samples to DAC
# m5 H& {9 }* K. F9 y! z  return;
$ m3 w- m  [* R3 E' [2 L% X}: N* l- [7 e/ w& J

7 H" [" G* O/ Y6 j$ x% o" ^int main( void )
! V" d0 J- ?9 X6 d/ g{
* P* W# H+ m8 L$ L  ?" E7 h; g  T: Q5 ^. Q" m+ `) C
    /* Initialize BSL */( B8 j, N  e; d% @& T
    EVMC6747_init( );
# j; I; r5 Q6 z# u        /* Call evmc6747_intr function */! b& e4 a6 t1 H- D6 l% f, t
    aic3106_init( );" i7 y7 G+ q- W- u3 |
        while(1);# |, Q) _7 b( C% B. X
}
5 h- V+ o" v- M; L' |% [: h+ R! ^6 o# l$ a( Y# `

- N4 H3 ^: z' F0 }4 N4 {, }9 gaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题/ a4 M/ `7 w2 P+ p7 t: ~  S
/* Initialize MCASP1 */7 C1 o4 ?1 o1 ]  ]" z
    mcasp = &MCASP_MODULE_1;
3 K+ ?8 }7 }0 T* u- P/ S. S- p& @    mcasp->regs->GBLCTL  = 0;       // Reset
2 W) Q5 r) K9 C  D. a' }8 c# H    mcasp->regs->RGBLCTL = 0;       // Reset RX4 X* w# H) t, |' i
    mcasp->regs->XGBLCTL = 0;       // Reset TX
5 d+ u8 Y3 s4 T. N! C    mcasp->regs->PWRDEMU = 1;       // Free-running
/ s# Y0 I" T. h   // configure McASP0 receive registers
* b% ^" p, T1 n- v* q; D/ g  z' ^& R3 N0 ?    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used2 `. p5 X! T3 D! P& d, S
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ y: M- E& `& b) o" }    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word! y1 F$ f7 a# E- J
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)- h$ j3 q& c  ^4 U; ], J
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
% Y; F1 n6 f* Z$ A0 L) O    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1$ l  f2 \. }7 }
    mcasp->regs->RINTCTL    = 0x00000000; // Not used$ ]: K! b! S& [3 T" q
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, f# |) I! s$ K5 C
$ d- N, r1 m# m' o: a% S    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
& b, ^/ P' C5 ?  j4 T: R6 ?/ D    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 l9 m; X6 X' c) |6 e! v/ F
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
1 ?/ P; ]9 m$ o    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
4 I5 u0 [# D4 l/ D0 v) ?    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
. V/ \& a, [" L    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1/ g4 D4 D4 o5 K& _1 ?3 S- P8 F
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
+ f1 |4 ]# o$ E, c    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" c$ U0 @" R4 H2 v
2 z6 E0 c: Y' p; F& q
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN: _( k3 X/ Z- M" s" D
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT# v$ Z( k# P1 a! T4 C
    mcasp->regs->PFUNC      = 0;          // All MCASPs
+ I. x# t2 ?1 x0 q3 D& d4 N% n3 e    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
2 u- D& L) [- H- X' E4 U, K4 W, A# u
    mcasp->regs->DITCTL     = 0x00000000; // Not used
5 |8 S; F3 k) d/ @' X5 w    mcasp->regs->DLBCTL     = 0x00000000; // Not used
# O( z- a. V' y+ U( F    mcasp->regs->AMUTE      = 0x00000000; // Not used
3 p6 o/ H  t' F1 d, y& B6 r3 r  e! [: k. Z% V6 O, m- L
/* Starting sections of the McASP*/+ ?! C* n# K( M4 x1 F
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
" ?9 B6 ?1 D- t0 P+ C    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
1 V" M( |: w! a3 s    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; - K; f6 V; H& U- y' Z4 i. x
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
3 Z: ~, l$ z: C4 ]' ^+ y6 U
# O- I0 Y( |0 J, i) O6 T    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 2 q2 K( S2 A6 ]9 [* i0 x
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );# ?0 c. D0 Z# c/ ?, ?2 s
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 5 y6 T' i6 T8 Y( u* H- @
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );- z5 _# }% Z) p" z# f/ v% Y2 B

5 o9 h8 m9 _- r9 r" v. v    mcasp->regs->XSTAT = 0x0000ffff;
4 C! j( I+ o% e" n0 k; u! R    mcasp->regs->RSTAT = 0x0000ffff; . E3 D' y! m  f4 e/ O3 S

0 [5 ]/ H0 C, Z9 o. `* Y    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
  u+ L; E% w; v* ?& G    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );, u$ v1 a+ q! x) Q" V$ Q
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
3 {* d1 G! B8 g, J    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );" c8 J  b, h8 s0 d% \

0 C; q/ F0 T4 m& |: z    /* Write a 0, so that no underrun occurs after releasing the state machine */7 s6 f, N% [' j: i4 T' H# S! d
    mcasp->regs->XBUF5 = 0;
4 J" S# M/ c+ }8 W2 {" c- L    mcasp->regs->RBUF0 = 0;
3 e6 S0 H0 ?$ [$ Y# n5 z" Y. Q' {' d  X& j1 [# G
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
1 [+ H' d- r6 ^. z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );: n! A& T" O! P' T$ X4 \
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
" F/ U5 B; g+ h# {+ [4 j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );5 e# H1 P+ W- P' I& j0 z
+ {5 R$ a# Y$ J7 d
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; % d$ H/ `  H- |
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );) X8 f% [3 l: t+ s/ I
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
( Q3 k  S( `% V# I    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
0 ~8 s/ Y- X0 ^7 _& b  L. f
( T% Y# Y& _' l$ p0 n4 P+ E    CSR = 0x0000;
* N5 _" a8 R. c8 i/ \3 i    INTC_INTMUX1 = 0x3d;
; q; S+ ?3 Z' v) z- @+ P    ISTP = (unsigned int)vectors;
- A* e! t  v; F. a. t3 L( B: v9 u    ICR = 0xFFF0;  & _. h1 l) }8 \$ K  F
    IER |= 0x12;  7 F9 z2 c2 \" \# K1 Y8 S# C7 W
    CSR |= 0x01;  6 |2 T+ B2 W6 n2 v% i0 O1 E. C

7 V1 L; s( H6 e5 R5 l% F! o5 @7 W) _9 ~% d' M
5 v' b  m' ]& a  V; G8 `
还有就是两个输入输出函数:3 M& D5 u8 `. t0 b7 c
void output_sample(Int32 out_data)
9 ?- M8 F6 i6 R3 _7 h; M4 N% {{
) J! m/ p! U* D+ b$ @. v  AIC31_data.uint = out_data;  
3 a$ ?8 D9 [9 }4 k7 p+ k  MCASP1_XBUF5_32BIT = AIC31_data.uint;
2 c% \1 Q8 k  q4 e}
3 `+ Z; z9 |' {3 }: h1 p% s9 I, g" ]" G; I% w
Int32 input_sample(void)# K5 d& {* Y6 L4 C* {. b0 ~
{  9 ~. A$ d) P1 a5 A' J8 }" d: E! r
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
3 m9 V; {# e* U. v  c8 D9 `- V  return (AIC31_data.uint);
$ ~% n% G: Q! F( E! O) h}
6 B! V# e1 i0 ?9 }/ c  p1 |3 ?1 b& ~4 ~! D8 {5 s0 L7 d
分享到:  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-2 20:31 , Processed in 0.038880 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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