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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
; v, S6 d, I) L$ l- @7 Kmain文件:
( C8 p- D" ?8 D7 a2 n- J/ ninterrupt void interrupt4(void)    I4 d3 r- Z' O) H3 d
{
/ t2 X! Y  ?5 V8 ]/ u6 h4 U4 e8 A  Uint32 sample;
3 u, b) ?& V  w# Q4 X3 |& c; {
+ ?+ K+ O, ^3 `- h( A0 e4 Y+ y! Y) V  sample = input_sample(); // read L + R samples from ADC  X. j1 l# o9 T
  output_sample(sample);   // write L + R samples to DAC
) n, e' {  u; w+ T8 ], L9 l  return;. I4 c( ?, u0 g. I
}
, L+ S8 K3 M( I( k  V3 ]4 [9 g8 b) o' R
int main( void )
1 Y, g" d+ p' `9 Z{
7 r" F( J8 }) ]& p6 u3 A) |# x' K4 ?$ x
    /* Initialize BSL */
9 l6 c* d- _2 j    EVMC6747_init( );
, ^3 b; F: ~8 j        /* Call evmc6747_intr function */
4 m; o* x$ T; o    aic3106_init( );: m( W( j) ]: C
        while(1);
& Z7 l4 E3 x* V}; Z: l; }. v2 h  w( ~
' @5 q+ Q/ u8 t/ O! z1 |5 j
" B$ M8 l+ T6 l  h2 [
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题3 ?; ?- e$ M2 h/ Q+ }
/* Initialize MCASP1 */
, o# ~- D$ W" k0 t$ G    mcasp = &MCASP_MODULE_1;& q" ]- B5 @* V; A) b
    mcasp->regs->GBLCTL  = 0;       // Reset
, e' O3 G5 e( `( e6 {6 V' A    mcasp->regs->RGBLCTL = 0;       // Reset RX+ T4 {& d! o6 _8 a. d+ H
    mcasp->regs->XGBLCTL = 0;       // Reset TX- }6 Z4 }: t% r4 x5 j$ p
    mcasp->regs->PWRDEMU = 1;       // Free-running
, {- k: b* X7 a& _" `% Y   // configure McASP0 receive registers% n1 d. \" r' d( d
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
8 s0 W/ A7 B6 ]1 x: v3 m5 q6 l    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, f3 B8 z! T, n+ C& q, {" m% p8 Q% G
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word, C) ^8 Z+ a* Z: ]; r9 [
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
8 T7 K# A; D  z  Y8 [* z9 W6 o7 P    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
% V, W, f1 O& y' F. V4 D) ]    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
* c* [5 y1 a3 W! U+ Y    mcasp->regs->RINTCTL    = 0x00000000; // Not used
2 H: r6 [7 Q4 {& j    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
+ Q! y! c  [7 w. Z& @
& w( e2 T! u8 |& R- ~    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used( [4 W5 U4 v# s7 o  j0 T5 m
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& u1 P7 l- x7 z8 O7 A( y    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word3 h* R; X* R# k' R. b5 p3 W
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
: y, W9 p. Z  K( N1 Z$ ]9 ^    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
/ L  J" ]: X. i    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
; `0 l/ K' M; P+ \% U: y4 ~5 M    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit; ^* c( q' b4 ~' H6 e
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* d1 n$ T: s( z$ {4 l

2 j! D: F3 P- s/ z- y9 e( O    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN+ U' {7 |# Q5 P7 @
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
4 [% S$ a4 p  y3 G& ~7 C! e    mcasp->regs->PFUNC      = 0;          // All MCASPs% \# x' y1 X: s! q- A
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1& V; O/ F' n* @; \, W2 A) Y+ m
0 K& m+ Y  M- x) R7 U8 i3 T
    mcasp->regs->DITCTL     = 0x00000000; // Not used. w  G6 l/ i% ~7 `) n- w5 `3 n
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
) d3 O( w2 H4 I! @$ g; F: M! W1 e. s    mcasp->regs->AMUTE      = 0x00000000; // Not used
+ W+ B$ E  Z) @7 G1 f( }
0 z6 j3 @/ p. W: h' Z% D/* Starting sections of the McASP*/( S4 u9 q4 t) r: k( z
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
* C, P/ _  h3 x, S* h% R! P    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
5 {# k$ p' b3 D! @# c  P$ z+ q% a    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;   j: o* j- U* s' J
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
8 F: v7 a! `$ g; |5 o; U. c! V% n
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
" N( ?9 ]0 S" a# E; T    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
, W$ `3 d2 }$ ?3 O- G8 ~' q& R    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
, L  V4 b  w' A: ?    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );8 j, @& J7 U% s& Y8 M; G+ j9 B

) I& c5 z' A/ N* |; i: K1 h" D    mcasp->regs->XSTAT = 0x0000ffff;
  A: A. @" r$ Y8 F" [    mcasp->regs->RSTAT = 0x0000ffff; 4 Q0 w% j( h( l" W" E% Y9 K

- L. J/ E$ T* p8 k' w! J1 a  P) A    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;( d  X3 I0 F+ x9 R
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );3 M) y8 }1 c% U* S5 v9 \# j# T
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; * Q4 ?1 ]2 F9 ]7 `1 R$ G+ f
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
9 q: g( R/ ^# ?  `3 K9 V+ S# Y
0 ~" g' O+ L% L- c# C6 q" i    /* Write a 0, so that no underrun occurs after releasing the state machine */7 V# F0 ?: h( {5 n) z  A
    mcasp->regs->XBUF5 = 0;: A3 [5 c4 d) l3 Y( c
    mcasp->regs->RBUF0 = 0;6 ?+ n7 h& k* A" t8 b* E* @) q
4 R; q3 c. `$ Z$ }4 X& d1 t
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 3 J9 C+ a6 N+ k2 u6 z/ m
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );6 s% B" Y1 p( m% V: C3 `) ^2 Z+ T
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
+ s3 }; Z" U* F% h  D    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
6 G! }3 i, E( T$ p/ {
7 ~& T4 g3 l( i2 S" B6 g4 a    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; $ s8 S( B9 A- f
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );" I) _* y' I6 q; m( X& F* {  r1 ?3 V
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ) Y- a4 G% X3 z- E
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
8 r0 e$ U5 |; Y& H- R: I0 `7 v+ k. S3 A9 V
    CSR = 0x0000;
  H0 ~% o# Y. Y$ l    INTC_INTMUX1 = 0x3d;6 G# g# `5 u; O- U5 O; E
    ISTP = (unsigned int)vectors;
6 r  U2 x: K( v0 d* e) P6 ]. t    ICR = 0xFFF0;  
" T5 _, k& \5 k: c- B* y4 r    IER |= 0x12;  
( i9 b/ U/ X/ F) K9 {    CSR |= 0x01;  7 W) {) Q1 u7 _- R
; P; O6 H" d. D: a, D

3 g$ L& J1 U% s+ b8 o0 P" V  F$ A- U3 w, ^) x
还有就是两个输入输出函数:) I) D0 N4 m& r; u) B: e) L
void output_sample(Int32 out_data)4 |: S. }, P6 g/ X+ ]
{3 a% \$ a: s9 M$ v( n
  AIC31_data.uint = out_data;  
( k7 n+ u5 P" u: a" S0 H6 _  MCASP1_XBUF5_32BIT = AIC31_data.uint;+ y3 Y" |& Q7 v; i* q
}$ @0 n2 ^9 _, K+ G

7 ]  v+ b1 P+ L; o$ P/ b. \  IInt32 input_sample(void)2 `( s% L  Q$ z% r
{  5 v  K6 g' k' T. ^/ {
  AIC31_data.uint = MCASP1_RBUF0_32BIT;4 y5 A" y$ Q4 m& ?& {5 J8 [
  return (AIC31_data.uint);
0 j- F2 I, q# d+ H4 P  ~* c& W: h}2 G; K/ P. \" k7 ~9 s3 `2 L: v9 r

& b2 u  L) i- h8 {' D! E6 o
分享到:  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-31 18:41 , Processed in 0.045506 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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