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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
2 L5 U& T2 U+ R9 h! Vmain文件:
) |2 J- ^  ^: Q& Z+ v9 `8 r/ v. R  Jinterrupt void interrupt4(void)  8 @8 ]$ @7 e: S. ?- P% \
{& F/ s- U7 ]6 D  L+ ~  y6 o2 ^" O
  Uint32 sample;$ Q6 @6 |0 r' F) L; e, Z. u7 c% ?
1 g. d7 u1 F  `7 o! c# d1 {
  sample = input_sample(); // read L + R samples from ADC
9 F4 E( r/ ^; `6 W( h1 N! i  output_sample(sample);   // write L + R samples to DAC
' R% p( D7 \0 W  return;5 t+ K& \5 I1 y, M
}3 R6 d  W" ^9 g
0 `4 ^  a% F: Y( W8 O+ ~( s
int main( void )
3 e1 ^$ c2 k9 X2 j5 i, O8 J! _{
7 M. `' M# \" F  X
# h/ i" K! ]3 ^% Q2 H    /* Initialize BSL */& x/ F  ]4 e2 u5 S8 p6 R9 P
    EVMC6747_init( );% A$ Q* U( d5 d1 V
        /* Call evmc6747_intr function */. i1 U2 y2 x% t+ v2 L, }  Y
    aic3106_init( );! U& N! y/ l! B; r, e0 V
        while(1);$ t4 u/ Y- t% @* m
}
( B4 p) s2 E# j/ O0 Y4 h! K) b) y+ K: ?+ ~$ G8 h

+ x# o% g$ ?( ?' o; Oaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题5 R2 s8 n. q  H' H
/* Initialize MCASP1 */
" ^& {, p0 C6 @, c% G    mcasp = &MCASP_MODULE_1;
5 z# ]# t  |; i) e# G' ^    mcasp->regs->GBLCTL  = 0;       // Reset
% H% L' z8 ?. F. F0 W    mcasp->regs->RGBLCTL = 0;       // Reset RX+ U5 J1 q4 V6 D2 y* ~% Y
    mcasp->regs->XGBLCTL = 0;       // Reset TX
9 C  J# J( R0 S8 Q: I0 O) ]    mcasp->regs->PWRDEMU = 1;       // Free-running
- S% T4 \9 g$ W6 ^& i) j2 t   // configure McASP0 receive registers6 q6 M# h6 W8 R" ~+ ~' B+ R' _. U/ m. m
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
; J2 C. I. a5 a6 G    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. [/ F- X+ V9 V
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
3 B) ^! k* [1 d5 o/ `1 h    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)4 `' m& D1 x4 r  U
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
1 S/ y, @3 y. f; R) d8 X    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1  u3 A1 r' p9 c1 _/ x
    mcasp->regs->RINTCTL    = 0x00000000; // Not used7 J7 ?# X# L1 H9 c. p) p: `" w5 Q
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 k* Z+ J. J9 Y  N3 V( @4 g5 ?8 J- z/ j5 z, k
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
( B' {; s* D2 u0 B8 w5 |. ^    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 ?5 W  r: u! |# ^7 U5 w  }: p: t9 @5 d    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word+ \; R) W) w% d" \' E) F( z8 M
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
% ~5 Q4 p6 ?) c" v    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK, T; o# |7 T! j5 Y. f9 A. L
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,14 g: T2 @9 t! g6 J, v  H- ~
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
. X! Q# Y- e( A0 R' r    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
2 t) k$ E- t8 X$ K; [% T* J
0 }1 ]! G4 N- B    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
8 E! u" T* e9 N+ K: X3 ~0 |( b0 E    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
- ]- S+ \& c/ @& J2 A* o    mcasp->regs->PFUNC      = 0;          // All MCASPs
, m7 ]3 q; r9 X) E, n( p    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
! ^( X8 F# F8 T9 p  u6 [) _8 M
5 h9 F+ Q2 G2 k    mcasp->regs->DITCTL     = 0x00000000; // Not used3 {4 V8 @7 r$ g# I+ z& L: @6 n
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
! L& B& a% r( [, }) B    mcasp->regs->AMUTE      = 0x00000000; // Not used! C$ y, F# O6 K. r$ u( G' |

: M$ j9 D: m3 d% @6 C& v, n. j7 G% h/* Starting sections of the McASP*/
; ]3 A7 f1 I# X( r  {    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 3 c5 V! V  l2 {. U8 G  [% B8 M. G
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  4 b4 G4 }' V( w1 n% h3 K( q
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
3 V) |$ v8 t) G7 ]4 c/ G; r    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
6 j* [& \/ E( u( f3 i" s/ t6 M" n, ~5 O- c& J* l' x
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
7 G7 z& C$ N  P3 e! k    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( C+ K5 c& @* H% p
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
+ B4 g3 t) }% ~8 T1 m& \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
5 S5 n6 q5 J4 I
1 K1 N/ _- d- k* r7 [& _3 `  ]    mcasp->regs->XSTAT = 0x0000ffff; % t/ @! h2 g- Z' ~2 n' R
    mcasp->regs->RSTAT = 0x0000ffff; # A/ k. H; p" Q0 _. K/ I) o
- x: A2 L- S% A( G+ ~( A9 p8 v
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- A( i' m8 i# ?5 q# p    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );1 `/ [, R' _5 b6 i. Z/ X. B1 @
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
9 b, r2 ?2 X1 x" C    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );% }& w& L- K" y0 ?- J

' y6 [; P$ W3 N" P$ M, n7 y  _! N9 \- v    /* Write a 0, so that no underrun occurs after releasing the state machine */
8 x" r1 U' {9 ]    mcasp->regs->XBUF5 = 0;
+ @4 p) e+ ^- u' H7 `    mcasp->regs->RBUF0 = 0;
0 n/ y& @& L6 Z% I2 F
& q7 u( S' `0 G4 p* s" e* |    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; , }' Z& g! [+ i' @2 ~6 S& g( ]
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
4 l# B, X/ ^8 {* g    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ! U! f$ G8 [2 f2 ?3 f
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );2 T/ r8 S' Z' W) r) r
7 j- [; ]9 z+ \
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 2 g0 x4 m1 Y2 ^* g/ o' ?
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
/ o  _% c7 U/ g# j7 Y1 n" ^    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
4 z- b7 {- B( Q% B+ ~! Q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );3 a$ [4 t0 @6 k/ t3 p8 E1 `' Q

( j. l( Y8 `" ?0 W* @2 P    CSR = 0x0000;
% I" t4 h" M$ l  d; t. H3 B    INTC_INTMUX1 = 0x3d;
" S  |% v# r; S7 B    ISTP = (unsigned int)vectors;6 C" v; j9 F7 Q& r& @* k  ^% @
    ICR = 0xFFF0;  / x6 U" W7 ~9 l$ {! d4 |+ q- u$ O7 U
    IER |= 0x12;  
2 }3 O9 O$ K0 f9 b& }. _    CSR |= 0x01;  
' [: `) K* T, Y1 h( P" m8 X/ g5 ], V* b; {; o3 M; X/ ~/ Z/ ]
/ i0 v  W8 a2 u% l+ }+ C
& D5 ^* }- [/ v1 P* k2 D
还有就是两个输入输出函数:6 h0 f& K2 v8 j6 F; ^; J$ i/ p
void output_sample(Int32 out_data)
+ S" E* ~& x% ^6 {4 J{7 \( U1 g* _: T$ F
  AIC31_data.uint = out_data;  
9 u7 B1 N; U# U" s& N  m1 w* o  MCASP1_XBUF5_32BIT = AIC31_data.uint;( ?! `) N: E: B0 L* L
}  G: M) q2 e/ `1 p1 R
2 B: d8 p6 ^3 ~3 d" v
Int32 input_sample(void)9 W/ r! U& Z6 k7 f3 Z- y
{  
8 [% m5 P; S2 {' {0 e  AIC31_data.uint = MCASP1_RBUF0_32BIT;
& X" c4 v: e* n* g  return (AIC31_data.uint);
. z, Y/ }. W/ M, M7 C  l1 e4 i. \}
2 n# M0 P  I8 c# x5 U. p, K1 F( K- q$ k0 L7 ^6 J
分享到:  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-3-13 04:34 , Processed in 0.040644 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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