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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:, D* K: ]9 i: b5 D% m+ m
main文件:
! J6 k0 y* Y% ?interrupt void interrupt4(void)  # j* y; z( p. t2 v; X- X& p" u
{
4 R; ]$ T! S& n  Uint32 sample;
9 ]4 P0 i5 j( s% m6 N
5 l- [* y% ~/ |/ P& j  sample = input_sample(); // read L + R samples from ADC
! H5 |; _/ V) T! V3 j1 a3 M  output_sample(sample);   // write L + R samples to DAC
( t* p# F8 @$ a6 I  return;- M$ I$ A' ~. M5 {
}+ A* G, _; s2 B, b
4 H+ x. l6 \0 _
int main( void )
( W% D, Z" O: b9 ]{
5 S: y  l" L" @3 ^7 X! ]4 f9 k' ~# i3 Z, L- d% @: x( y  v. p
    /* Initialize BSL */
/ C% ~( U% B3 u. N2 G" g) W9 S* i, J    EVMC6747_init( );
, l' T0 [9 {9 A  z/ F5 W        /* Call evmc6747_intr function */
! e+ R) D6 ]  F2 B6 C& ?0 E" ~& u    aic3106_init( );3 U. A* r: G) b
        while(1);2 V1 S& @9 e8 c6 A+ |! B
}
9 K7 f2 [9 h8 ?: O( X7 J1 r
% w1 ]6 ~, f* P  B, z- C2 v. y; i3 \7 c+ r3 o& B/ v! l
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题/ z5 g7 ~" h0 `0 Z# q
/* Initialize MCASP1 */
# E" Q& {3 T' G( p' t    mcasp = &MCASP_MODULE_1;. l. }/ d0 ~: d- a
    mcasp->regs->GBLCTL  = 0;       // Reset* h( I' Q9 ]6 Z: L5 N2 A
    mcasp->regs->RGBLCTL = 0;       // Reset RX
8 a5 j* U9 y' |" L. H7 \    mcasp->regs->XGBLCTL = 0;       // Reset TX
6 n! u9 h4 Z" R1 ?% ]0 A3 P    mcasp->regs->PWRDEMU = 1;       // Free-running4 {- z) v5 J2 w
   // configure McASP0 receive registers
" P' U6 g' b2 N3 H6 T8 L0 P  _    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
* n* y) X7 D/ Q  N; B8 l7 g    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus  _7 T& S8 V5 F" `
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
; K+ u) a7 O6 y. c    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)0 P: q  n" _: T- Z. T: V) b3 S$ f
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)2 d0 g- C. f$ [2 P- m
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
$ x% F+ ^5 A, W: M6 q4 N    mcasp->regs->RINTCTL    = 0x00000000; // Not used+ i" v. K$ C* z. x. c6 _
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" W4 T; j) X, z  h. J
( I8 F5 B$ a! h1 N- [    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
' ^% h" X1 H4 `    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 ]# s% ^! K  ~& I' H; [" T7 \) d
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
+ |' Z; \' f( u2 e0 [7 [' ?5 ?9 s    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16; s5 t6 O7 D9 C4 _! E
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
: N/ @: l+ m- r; {    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
# ]( [- O. o+ q! a+ p    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
( O" K* E# l: a! I) y4 g    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& s0 ?( B2 m$ a# p+ E
% w5 R: r4 `+ k1 @  x4 s5 ~* i    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN! u9 G/ p3 B; _- [; Z' q" ^
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
/ h+ D; G, V: k% H) k  C- H# q    mcasp->regs->PFUNC      = 0;          // All MCASPs
. |1 C4 m* L' g    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX17 {* W3 I& ]  P, m! v2 j
! |1 r, u! S+ P$ |5 I2 Y) F
    mcasp->regs->DITCTL     = 0x00000000; // Not used
5 g& J- Z5 I* e6 l    mcasp->regs->DLBCTL     = 0x00000000; // Not used
9 a/ B; @9 o1 P0 t    mcasp->regs->AMUTE      = 0x00000000; // Not used
0 V1 t7 S# |/ l+ |* t  r9 a8 c- w# O% m
/* Starting sections of the McASP*/
3 G; ]# x$ w  Z# p" {, q- B    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; & C6 U( O5 K3 C9 C2 s
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  2 \# b) K- ?  T8 ~
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 7 U2 ~% x( h; c3 B% g
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
$ U& M5 M. V8 M
# X% z: Z* ~+ K5 ^8 R    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 3 |, j5 @6 c4 |+ C" F2 N4 T
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
- S- C7 R/ ]9 A" c1 w/ H    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; , J7 a: A# i. X3 {; L) m
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
* m1 l% R, X4 D! ~9 t3 j# L: F# n3 Y8 ^3 Q8 R: ^/ \
    mcasp->regs->XSTAT = 0x0000ffff; + a6 \4 ?$ f" a5 m* ]2 }3 M4 e- L8 W
    mcasp->regs->RSTAT = 0x0000ffff; ) L2 F3 p; m  S- v6 y2 k( ?9 _
; r8 i( p0 z; v2 L
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
( g0 u* V. y. m& d& Q/ j& r    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
: t% n) u- k$ o# [/ {& P    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; , X; e9 w& |& W+ u7 `5 |- l
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
. y% A  P% a/ b$ \# r: s. H2 l" K7 a0 Y( j6 N3 O
    /* Write a 0, so that no underrun occurs after releasing the state machine */
) ^# J9 D* r8 m; u- z1 w, Z    mcasp->regs->XBUF5 = 0;4 k  |# _) V6 O! n  D
    mcasp->regs->RBUF0 = 0;
' |* @' }$ k: }' ^5 f- s6 l( H" _! a7 ?
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
  `* N+ y3 z# y# E' ]9 b: h! X5 X    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );! {0 _: h6 R  |, {3 o) ]2 C
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
. l( \! e4 @* X7 p, v6 Y$ H    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" k0 ?! m4 \; ~8 }
- U& Z& Z3 L! V6 O8 o* F1 K2 o2 U2 Z1 `
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 9 D) g8 \0 B- f0 y8 h
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );, x& ?' Y2 U6 O% n2 W+ c
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ; R& N2 M; ~7 G2 _( ~
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );+ J3 W+ J6 p. B) D; e/ s4 A8 z* |

- B" y: ~6 X9 X    CSR = 0x0000;! X* _5 R  c) z! ~! p) Q! b# l
    INTC_INTMUX1 = 0x3d;1 I- _, L: P2 ?5 Q7 X; r
    ISTP = (unsigned int)vectors;7 T1 c9 Q! O: g! U1 U0 j
    ICR = 0xFFF0;  
6 s% ~& ]  |' h8 j$ U3 j    IER |= 0x12;  
5 f1 I$ W( \% c- R1 ?    CSR |= 0x01;  % W& ]8 c: W" w1 r" W; S0 J3 g
" C9 ]' e3 z! V+ n2 z
- N9 b6 d/ d# g: \
9 l. a; C% n9 Z3 }2 ]3 x3 D- r
还有就是两个输入输出函数:
; f+ l& d% V. W( Evoid output_sample(Int32 out_data); u' ?& ^- E3 H6 R
{
+ F% c7 L) K. r6 b& x  AIC31_data.uint = out_data;  : d+ F5 ?. h( p# N: u
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
/ k# |  g; C* b& b5 T" `2 N: J# b+ _}
  B/ A7 V) G0 H3 C0 ]6 D; s
* I( J6 o7 y* _/ aInt32 input_sample(void)' c4 o0 a9 h  `( \. W1 ?+ E& k/ p
{  
4 z7 v9 a. y: ]+ \9 D- w  AIC31_data.uint = MCASP1_RBUF0_32BIT;
) i/ {" t2 I2 x* X' u8 z  return (AIC31_data.uint);
0 X6 \; x8 _( |, Y) Q5 z}
& O7 [; R9 Y: j: e. p5 [0 a. I. q# p% i; c. m2 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-12-4 12:11 , Processed in 0.041324 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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