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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
9 U# d' C( Q$ Q2 R. Vmain文件:6 K! O: B3 I% U9 O* f5 M4 T  ~4 ?8 p& O: {
interrupt void interrupt4(void)  ' H- K2 }. C9 \' x
{
& v0 c6 y' x; \- U  Uint32 sample;
/ C2 T+ `  P7 R9 V8 x, @+ A
6 W5 v, W( M; g  sample = input_sample(); // read L + R samples from ADC
& B5 r$ }, n5 ~1 _5 B( ~  output_sample(sample);   // write L + R samples to DAC
1 K: \7 v$ x' r7 L  s  return;# ]5 c  n  l" T: e0 {) H
}& ?( D! J$ N+ ~9 H4 w
* O: O8 C* X9 W" c- q" K( o
int main( void )0 B1 F: `' z8 [! d+ o0 W
{
% [( w+ ~; W2 N7 U5 A
+ W1 I* q* }1 W3 A    /* Initialize BSL */- E& |* x0 N) ^2 i4 ~1 m& O7 o
    EVMC6747_init( );
( W; N. l; V+ @/ V7 t8 H        /* Call evmc6747_intr function */
! P* z2 Z- }4 {- w, Q    aic3106_init( );7 }# V) M1 H3 b% P! U
        while(1);
+ ?/ e# h3 X& h; h2 c) P}& I9 u; g' X8 ~
' E% N: |* b( X1 R7 J

7 X/ ^9 {. z6 D% x% ]1 v3 M$ }aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题( ?; P8 C- h8 Q! U# h
/* Initialize MCASP1 */- v% T( Q9 s! n/ V6 a6 `
    mcasp = &MCASP_MODULE_1;8 g8 k, {- J1 y, B6 O+ {$ L
    mcasp->regs->GBLCTL  = 0;       // Reset
! e5 u8 J% X  F    mcasp->regs->RGBLCTL = 0;       // Reset RX
$ f5 z+ Q# O- i- x0 t( M4 r    mcasp->regs->XGBLCTL = 0;       // Reset TX
* @2 y4 S. U% v; F    mcasp->regs->PWRDEMU = 1;       // Free-running
/ l" B/ p# o6 N   // configure McASP0 receive registers! ?* ]& a* _# i9 s  W! |
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
2 }3 u5 j; _" p; [* ]/ t    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# Z. \+ ?7 v) P, E+ J6 w5 x9 g* q    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word/ z' z. q8 O$ a- b6 l5 C
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)  |( f2 c1 `( p, P1 ~2 g
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
5 V8 m0 P1 ]7 m& z& T, k6 ]" ?0 F: n    mcasp->regs->RTDM       = 0x00000003; // Slots 0,13 `" x3 T5 {& D* M
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
7 B. t  ~; c% M$ i5 K' L8 A2 c    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
2 H  i" n5 z: Y- ?+ N4 ^2 c( M& i( p" k* J
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used! t  E3 ~& O  b3 U1 V2 \; @6 E
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: g. ]7 g5 \- L, e( F
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
1 z: Q$ J4 @, I& L7 X! {    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-162 x$ p0 o6 A- T$ ?4 ^% T
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK" ^8 R4 J" u6 Y, p+ c# \
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
5 j( `9 q. _/ X* n  S/ q+ \0 H    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit7 \* B. h: S# q! [4 s4 i
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
/ N1 {# T: ^+ D9 K8 L9 K! D5 k& }
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN" _* Z3 O: v3 d" z* H
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
" \5 B2 q, N( \# t" W    mcasp->regs->PFUNC      = 0;          // All MCASPs
+ y( k9 [! @# ?" ?% h* d) p    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
* A( x# n" h; t: l- `* g
( i+ g: N3 ], d    mcasp->regs->DITCTL     = 0x00000000; // Not used
" @7 k4 t6 C- v- |- n$ D2 I    mcasp->regs->DLBCTL     = 0x00000000; // Not used
! q$ W; k. }# a% o    mcasp->regs->AMUTE      = 0x00000000; // Not used& {: T/ e& L% z! Q" S' e
  m2 s$ F, P% [+ z/ x- d% e* D
/* Starting sections of the McASP*/1 j; W2 A- D0 @0 l0 x8 {0 J1 d9 `
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ; e8 z# O$ C6 `% w4 g! s
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  $ R: o4 P1 O7 T. P% ^
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
2 n; ]" X3 F/ J; G5 \( Z" ?& O    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
- p+ v$ z+ t* B/ M7 {2 y% }' W
. Z+ m- C5 G0 }  T3 q    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
/ N8 F8 c$ G* b+ r! L    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );/ p7 |- Y( _' d
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 3 u+ W* A& @/ v; r# _" h7 ?
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );1 }, O& m' l- a1 {

9 I  X( ]0 X3 x& i8 r& n" _    mcasp->regs->XSTAT = 0x0000ffff;
0 z, P. V! g* [: F    mcasp->regs->RSTAT = 0x0000ffff; / Z$ C( f0 C: @, d5 l

; j( o: x2 h; `6 A! Z    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
5 e/ p6 @$ x! |( o) U+ k3 ^  |- ]/ b    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );1 E9 q$ |; }( U2 n2 \
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
! Q, z, E1 @% |- f: s; V% n    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );+ K' p7 L5 i7 q
' q% `' C5 Z* U1 K  ], S1 l) E
    /* Write a 0, so that no underrun occurs after releasing the state machine */
8 C" |" }; ~- f5 v    mcasp->regs->XBUF5 = 0;  J5 g  e5 j" \
    mcasp->regs->RBUF0 = 0;2 f, p9 U9 v. t9 u/ s" j- B' I

) A2 {  S4 a- N9 |0 [+ U/ N    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
9 ?) L/ y/ N. t2 l  V    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
! V5 n0 d8 B6 D# _* {! s! R    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ' J' j$ u& k, [2 I! h  X* Q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );( }, }! e4 t$ b- z* B
! U5 `: I# r. s, C
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; & g" F: o9 I* H; P1 |- B2 D
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );6 \' F, G. D' L8 T3 W2 R% L( r+ J
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; + w! h; {5 [3 i4 e
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
7 t. h- M( Y! L  P7 [- g- e7 m3 {7 S: D
    CSR = 0x0000;- N$ p" ~0 x3 ~
    INTC_INTMUX1 = 0x3d;
! ^- Q( H4 @1 F; n    ISTP = (unsigned int)vectors;4 f6 P6 B. J7 w0 x  Z& l, h  g$ \6 R
    ICR = 0xFFF0;  
$ @- \7 u/ N2 _2 ]    IER |= 0x12;  
' u. ]6 F( j: E' D    CSR |= 0x01;  
. |: x, {8 p4 G+ w& R5 A* `2 m+ P# c2 ^. R$ f
: R! G: Q* a3 H' p- t) v

9 g$ K; U& A- \: _还有就是两个输入输出函数:/ p% A$ ~  g* z
void output_sample(Int32 out_data)
5 d. P' q& M; X, X" Z8 \{! y. n! a# ~: I4 P0 a3 L) l9 h
  AIC31_data.uint = out_data;  
  o6 a! D3 Z8 x* N/ ]  n1 h- \  MCASP1_XBUF5_32BIT = AIC31_data.uint;5 ]. j% W8 Z8 f' x3 \1 Y
}
+ T* y$ n' k7 c- w' Z8 W# J  T, S' C) _  d7 p) d9 M
Int32 input_sample(void)1 o  ~( _5 N# n* U
{  - l+ P& y# [$ t% Y% A  d
  AIC31_data.uint = MCASP1_RBUF0_32BIT;6 n! z, H5 k; w. P  `
  return (AIC31_data.uint);6 M. [, K( ~. M, D. P! q, s) D
}
/ Z: F8 r' e8 e0 R( B& P  X
, E; A' o. L7 v; c) w8 I
分享到:  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-9 22:47 , Processed in 0.041755 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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