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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:$ N+ o2 x2 ]( p/ I6 Z
main文件:$ B( \( L4 t/ D8 V) e8 A* v0 I
interrupt void interrupt4(void)  
. O8 p% o. g4 T: Y5 Z{
0 O* s& v- y1 n. y  Uint32 sample;5 U' p9 N: e9 I3 A  G; _/ H

: m8 m3 H& `' E# p# H9 ]; e/ f  sample = input_sample(); // read L + R samples from ADC
: G2 F( f6 ]$ y  output_sample(sample);   // write L + R samples to DAC ! i4 e6 z' v' X( E/ k* o4 r+ T
  return;% y2 _! j! _  H  e6 S( H& r) D
}
, K! S8 x" }6 ?+ F+ }
, p2 d0 i0 x4 X, xint main( void )
( U- k& C9 t$ ]! `7 w3 b$ R: b# A{
8 V4 u* z8 A6 M/ A6 ~( H" D( E1 O7 X) G. \4 t, t* N- L) p# ~2 C
    /* Initialize BSL */2 R9 x( \/ E. P+ B1 F& v4 i2 {
    EVMC6747_init( );; j" i% }% ^/ O5 g4 n: P2 h" _
        /* Call evmc6747_intr function */4 z+ O! @% x. n5 u& ?! [/ B& h# M
    aic3106_init( );% r$ x/ S0 `1 n7 r
        while(1);
+ l8 F- J7 V$ X! A0 X8 i0 C3 q}- U; a( U/ J& ]

& A% N; X2 x6 S* S% l- A
; q0 }' I* i2 ]aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
% y9 B; T/ C9 e/* Initialize MCASP1 */1 t! B4 _& D! o' |- S6 M* _
    mcasp = &MCASP_MODULE_1;% Y' @9 @" _  y( J) Q$ s3 R
    mcasp->regs->GBLCTL  = 0;       // Reset
4 v1 y, z* G$ z. _    mcasp->regs->RGBLCTL = 0;       // Reset RX3 M' _9 F% ^6 L. y% K" V) F
    mcasp->regs->XGBLCTL = 0;       // Reset TX
, l5 ]& W3 F! n9 Y0 W) t9 ?) V2 F  ?    mcasp->regs->PWRDEMU = 1;       // Free-running
9 w/ H7 a: L1 d$ t) S0 n+ ]+ X   // configure McASP0 receive registers; E$ t& {9 C+ P) z1 @+ r- F" p
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
: D. t- V2 O, k( g" w: }- {    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 H$ q8 t. b- t5 i$ }) ^% I    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word) ?  K+ n$ V+ E. }$ B2 b; S6 d
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
7 r: K- s' V6 ^+ e: [    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
$ a- v' {* ^& Q* u: h6 Q    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1. M4 ]6 G4 l4 g% p1 ~
    mcasp->regs->RINTCTL    = 0x00000000; // Not used* V3 l, p1 u4 a7 ~
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; X4 ^: x1 B, u# f, |6 P

" m! ~* ]7 G0 }8 y8 y    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used2 M0 D3 k$ u' `3 X! z0 k
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus- t, O* j, t5 T
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
' t  |4 D5 A- s2 H5 P    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16( Y0 ~6 r% R$ G7 i& @& ^0 M
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK# v: d7 b4 x! L# V  d, I
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,16 j2 x' u! H- r" F8 d
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
1 \0 F! i: g2 A" M4 e( _    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; k# i5 [, y3 n

2 m) w0 W8 e5 i" T    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
- W& S5 `7 j! J* u& \: n, @    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
5 f  ?' y' ]9 m7 k/ p. [    mcasp->regs->PFUNC      = 0;          // All MCASPs7 T! s$ ?* M# k* r
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1; A& i% {% c; h+ X

7 @# _2 m- f, k% ~( U$ W    mcasp->regs->DITCTL     = 0x00000000; // Not used
; `  d4 n9 a& i- r. a    mcasp->regs->DLBCTL     = 0x00000000; // Not used2 g' w3 y" ^7 _: ~8 M
    mcasp->regs->AMUTE      = 0x00000000; // Not used
9 q. d1 w9 {% y8 u: g8 q( a
: J' b0 L7 `9 `' v8 n( z8 z8 D/* Starting sections of the McASP*/) z1 n% r* H) I* R( \+ u9 ^
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
, _7 ]3 H4 v7 J* t! C5 b    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
9 j7 v7 R4 O, I    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
, U# u$ ~5 o7 w3 U5 D    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );8 n* g9 W2 n( _9 q

3 k& `0 x) p# y) X; u    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
) e' h' Y# A6 l8 L5 Z6 \    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
2 j2 I6 R) B; `# R3 Z  B    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 7 V. o+ J' l% j5 H. V; V
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
+ C; ~) U, T! K8 N7 Z" a5 {) ?8 x7 l& o  [
    mcasp->regs->XSTAT = 0x0000ffff; 9 h+ B+ Z# j0 Y+ K) A& a
    mcasp->regs->RSTAT = 0x0000ffff;
1 e2 T2 o% c% `5 I6 G- T0 C5 C9 O5 o) b' a+ {
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;. I5 W/ I$ J2 |6 R# [2 ^
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
! x# D0 Z7 J# D. I    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; " M$ h+ l9 o. C/ B& A' U) B* V1 S
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
& g# P6 k: U* j; i  b3 b/ l+ |) L! T% G; V5 t+ k3 U! B
    /* Write a 0, so that no underrun occurs after releasing the state machine */8 i  ^# X; M, Q
    mcasp->regs->XBUF5 = 0;
( H8 |7 @1 t% U- c: a  n    mcasp->regs->RBUF0 = 0;
2 y- {; N0 f' ]% e
! v. b! X. h/ x    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
! ^" |9 l2 E/ W, m' j7 U: Z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );4 q- I+ o; |$ _+ j, K3 }7 [" {
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 5 B- }" S* j6 @. p
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
( A" j$ O' c9 p; x, u  D) z4 A
9 B. s: @4 u. b* e    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
  n5 W' m) @8 @) y    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
0 p4 i8 ?- H. j* n2 m7 s    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
5 A1 A# t! c& {7 p. l* K    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );6 K; U: k$ c7 @8 d: @! }5 C

0 J/ w( N  w8 ]1 c3 ]: @3 ]( J# A    CSR = 0x0000;7 Q/ d5 y& l, h. E7 l
    INTC_INTMUX1 = 0x3d;
3 |# f$ ^+ B5 Y/ q/ H9 Z, Q    ISTP = (unsigned int)vectors;. a* l( A7 O& Z, F+ B
    ICR = 0xFFF0;  3 S) t1 g' m: W; @2 w
    IER |= 0x12;  
* M+ R2 O0 z, P0 j6 b5 A    CSR |= 0x01;  
/ {/ i5 r4 X. C, D- w5 a# m' S9 S+ o: t. C- N! N, Y; F
( J8 w7 r2 N5 N! Z$ x, ?

5 z6 p8 x; u$ X9 d还有就是两个输入输出函数:
' H' f9 S1 B1 v6 v2 G0 G9 {# a7 Fvoid output_sample(Int32 out_data)% _8 [/ E& O* A5 J5 }  I% i
{- e0 V0 }4 z9 `" f- b2 Y. p, x% O
  AIC31_data.uint = out_data;  / a; w- L3 \5 ^0 x- Z4 M/ J
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
' l( T7 U2 z& O}
$ J0 M, I2 N7 ?. {9 R
$ a- X$ G! F+ ^2 e% LInt32 input_sample(void)
& |( G0 e+ F0 X( e# q- b. R{  
1 \; }7 S  [9 T  C1 N2 }. P2 t  [  AIC31_data.uint = MCASP1_RBUF0_32BIT;
. B; u; o2 z% J1 M  return (AIC31_data.uint);
: n0 {( S/ B- h}
! W+ ^4 N8 o2 n! w& ~8 i9 w5 x. K4 Q5 t* o) l
分享到:  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-11-24 16:34 , Processed in 0.038898 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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