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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:& G# q# J+ L8 i, {9 w" H
main文件:
+ @" J/ s$ F1 Dinterrupt void interrupt4(void)  
1 n4 L9 D1 r) q$ |4 t{# ]% G5 \. N+ m4 K- y
  Uint32 sample;) y9 t  |; I2 l" U
- e/ T1 v" ~6 ], U1 v- i; o
  sample = input_sample(); // read L + R samples from ADC/ l2 l" d! ]9 q5 G) z
  output_sample(sample);   // write L + R samples to DAC + K1 A& J- X2 g# n8 h
  return;7 N) L" M& q+ d) ^
}& _% c* E( q1 m/ R9 I

4 {  `8 r8 n, {) q3 {int main( void )( |4 ~8 o, S- ^; v& y* T2 u2 O; _, ~
{0 [: t3 G# h. g" J6 w: s( q" n

& }, j" b* d# _, K( s+ ~. a    /* Initialize BSL */( I& n0 d+ O, |, F5 ]" h
    EVMC6747_init( );
( h6 {! N1 a: R        /* Call evmc6747_intr function */
! X4 r- N( A8 s6 f$ L    aic3106_init( );
, f: ~5 l5 _+ a        while(1);
1 C# c/ q/ w4 ~. d6 N% I( d$ m. }9 @5 {6 s}
/ w1 |3 |4 Q0 f& o1 b  O. o) ]( |
9 n0 G" o4 {* k0 b2 L8 k5 E
; Y: w$ I- G/ j: |aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
  Y9 P5 N  s* d$ c/* Initialize MCASP1 */$ u0 v/ ^3 k! I8 t
    mcasp = &MCASP_MODULE_1;
1 x" Y5 X* ]% {! c+ u' z& x    mcasp->regs->GBLCTL  = 0;       // Reset$ m# [' m% H+ }; t4 a) n
    mcasp->regs->RGBLCTL = 0;       // Reset RX
2 t+ t+ R% G  j$ |9 T# n5 \. E& r. x    mcasp->regs->XGBLCTL = 0;       // Reset TX
) ?8 L2 I  K2 |8 e- S$ X2 C. D    mcasp->regs->PWRDEMU = 1;       // Free-running% x* q4 k; Y7 \- a# @% A9 }
   // configure McASP0 receive registers
8 t3 c6 T0 z5 K( x    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
+ \* `) z7 v8 r' v( C- ~. T, j6 N    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 g' j& M4 c( n& z- Z6 I9 v    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word: S9 I7 ~3 A" ]
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
: B% m! g7 k  a- U% k    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)! h# \# Q) I9 W: f: Z
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,18 m- }% e! t/ J- a3 v
    mcasp->regs->RINTCTL    = 0x00000000; // Not used8 W$ q! Y; z* D3 n, {' K
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
2 H# K/ o" ?( ~
' @+ {; j* g* X9 G8 }9 A( X- [+ `    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
5 g9 A$ K2 b5 O    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 @  I* Q7 ?2 C1 m" _9 }5 c- ^3 K
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
3 }  `2 d* A$ X% m& l    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
) A9 ^$ y. C$ J: @' |& A    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
* F) H: h! X( |  E" K4 p) D/ }    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
7 u. N( P- }' g7 N! t7 ~    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
# `4 @1 g! G+ Y+ k8 [    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 `7 Z7 Z# @: ~. W
- n/ `% k5 T' e9 i
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN: u: E  L$ s$ K' _" }
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
% l/ Z1 i& w: r9 c! o( J$ U    mcasp->regs->PFUNC      = 0;          // All MCASPs: _3 y% l8 c# \, v8 u& B
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX11 U0 X9 g$ }! d4 L
7 x9 Y3 V7 A% z7 i9 R
    mcasp->regs->DITCTL     = 0x00000000; // Not used
8 c' P# N$ g$ s* f    mcasp->regs->DLBCTL     = 0x00000000; // Not used7 I- T6 O4 ?% e; N. ^
    mcasp->regs->AMUTE      = 0x00000000; // Not used+ ^9 V" A  F+ N& Q9 O& m0 h

" T2 _, \& s* _: `. K) M' n/* Starting sections of the McASP*/
: O/ s) p3 k8 W% m/ N4 e    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
1 Z" _- |) _, y- R5 O4 D8 N    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
5 z; `, P. y9 Y, r4 u8 _3 R    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
! b6 i+ y" J" U& X0 h. }    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
- B. K  O$ M/ A  w+ O. w& Y2 I" J
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
4 W- F% L2 e1 Z8 F    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
% f& b4 a8 B- o: }. ?    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ' ~5 A6 m# ?( L4 W" Z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );- h1 N. g. d4 ^8 Z' w9 W' p0 L

- t' V3 A& w- y    mcasp->regs->XSTAT = 0x0000ffff; ) y! D+ E4 T" Q" P2 Q
    mcasp->regs->RSTAT = 0x0000ffff; % q5 G' K5 Z  N& F! z0 R
2 w  v4 ?2 D: F  H. n9 x6 b. p) p
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
" g1 t. ~' G" I9 r" @0 p    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
) V4 \% y2 }+ `9 x* H. L    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
: @* w# O' q& X& }$ C    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
9 r0 {2 u2 m( c5 z3 P* F  B# \( A! ^
    /* Write a 0, so that no underrun occurs after releasing the state machine */, |9 @; i& J, a& z
    mcasp->regs->XBUF5 = 0;* `% }  P/ Q  X" j+ E9 [. n
    mcasp->regs->RBUF0 = 0;) t# P- }4 l' V( c1 z

9 T: ?" R; y$ X: {% N    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; $ z2 i7 c% \( R* X
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
9 ^& B1 ^  F7 }3 h8 \& {. F    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;   z* e3 x5 L& S" y  k$ C1 V  n
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
3 B2 J8 n8 I$ D- U: ^
9 c5 i! n' e1 R0 g    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
1 f9 W5 I2 V* Y/ C7 `2 ?$ [    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
+ p- j* t; H5 n: a  S! \    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
0 ^/ X; }7 m, @6 x$ ]6 g3 A    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );4 J, _: p3 {- f% F3 E
6 l  ?8 h8 J& U7 L
    CSR = 0x0000;7 Y4 D$ ~) M9 R" j+ Z+ H8 `
    INTC_INTMUX1 = 0x3d;, Y" M0 w+ \% Q8 w; ]& k2 r. s, I+ q
    ISTP = (unsigned int)vectors;
, R7 ^" ~+ A$ G( ]  X1 ]    ICR = 0xFFF0;  
& z$ H7 ]/ m( T1 {- _7 G. p    IER |= 0x12;  
& y& `& |7 F$ j; w; Y    CSR |= 0x01;  
# ?' c2 Z* s9 C" l$ n: n
8 }. m4 e4 R% x* |0 {. M' U$ h7 g" p6 }) `, a
) H, E% l7 x7 r
还有就是两个输入输出函数:$ H# O6 c* c4 ?* @8 V+ Z) y+ d  j
void output_sample(Int32 out_data)
& e( U& u3 E/ v  N, |1 l" q{4 B; ~3 s; T" H5 g* p" Q5 V
  AIC31_data.uint = out_data;  9 ]9 P& I$ C8 q/ w: {
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
7 k/ {0 E6 m0 t7 `$ f}, {8 z$ d3 Z0 `' H: _

! T& L' W. s# X2 r; G, Y2 ^Int32 input_sample(void)
# g3 _9 }( e- V( o{  & |' ?, V. V4 U+ ~! }% E- l: Q+ h. e
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
8 f9 p' M3 R. ]" {7 s' f  return (AIC31_data.uint);% T) N; D5 a1 D& b2 s6 R
}5 T# V" Q' C* B5 v8 B
- y9 D  Z7 o2 c/ s- x7 w
分享到:  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-29 11:34 , Processed in 0.043394 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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