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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:" L5 ^4 A+ t8 ]) z& J
main文件:
" j8 |0 c+ y" y1 Ainterrupt void interrupt4(void)  
$ t1 r8 ^2 i! M4 g1 u0 k7 p{
( `8 l0 Z) Q0 {2 N' C  Uint32 sample;
0 f2 l$ E: n6 H# I: ]2 q6 h% R3 s: h
  sample = input_sample(); // read L + R samples from ADC
6 N6 t: c5 L4 p+ q+ M0 j  output_sample(sample);   // write L + R samples to DAC
6 b- A! H# w3 H, V* N* n: ?7 ]: Y  return;
8 S7 ~& N7 p- a0 u& G}4 k% g1 k+ W- ]0 M6 h

3 z( c/ Q8 H: {int main( void )
2 w1 \8 l2 e) m: E7 [{
  O' E8 ^% }6 S8 |- F' A
- S' y: @' q/ g1 h7 B7 I0 n    /* Initialize BSL */- m7 {  s! G' a4 x4 c1 V
    EVMC6747_init( );
4 f4 X7 j. X( X9 j- D% t        /* Call evmc6747_intr function */
8 d9 b, f" n/ h; W3 u0 c    aic3106_init( );
  B6 g# n+ W, `4 L        while(1);
: E4 {0 n8 R' N0 S}! h& Z2 S6 d7 i/ V

& S8 K+ E6 B5 }) j/ z5 L" ?0 I( ~" `: W
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
% l; a' @: t( q3 k+ @- z/* Initialize MCASP1 */( C4 Y9 j# O5 w' j# X; A; `. Z
    mcasp = &MCASP_MODULE_1;  s/ t% S+ e$ d8 Z6 i. E
    mcasp->regs->GBLCTL  = 0;       // Reset- t* v' `$ L5 j: q  U
    mcasp->regs->RGBLCTL = 0;       // Reset RX
  [( C8 T( ?) t5 a% ~    mcasp->regs->XGBLCTL = 0;       // Reset TX; @; h- a& k1 [: f
    mcasp->regs->PWRDEMU = 1;       // Free-running
5 U+ U# u6 m0 L# |; u5 h   // configure McASP0 receive registers- F. Q4 D+ H: l7 E9 J. x1 w
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used) G) S9 Y3 ~, W0 W
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus+ M$ N. T/ m/ G, }1 R4 t" b
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word+ Q" Y0 c2 E2 R* T7 q! c, |
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
& c7 e" v# ^+ n8 [6 m0 x: D! |' @    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
1 \/ J( A; q6 K" S    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
% n5 t% g( ?; S    mcasp->regs->RINTCTL    = 0x00000000; // Not used: L/ [0 U8 V" p4 T' l
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256, l1 q  U0 Z4 ~) z' T
4 X4 v6 p6 @4 q* o1 H. }
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
9 T; _& j' J5 T* p8 z  v9 X    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: H* N8 T8 I6 s& N
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
& A6 f% y' \9 u    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
  [+ C8 q* h- q: l7 d; ~    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
$ \, D4 F1 N: c) w7 p    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
) o& `) f% L2 T6 s% c! ^$ @1 {- S    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit  g3 m. O! j6 v/ q' Z
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 M/ H3 L2 E6 C; i; Q( |3 B4 a+ T" x7 e& _; u4 U
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
6 e5 z: w" e, A' \    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT- W! e6 p( a- r) M2 k
    mcasp->regs->PFUNC      = 0;          // All MCASPs4 _" ~) h$ J5 d9 x  a
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX14 a0 b- G8 R+ _4 P7 m

) V: q" B' R2 I9 D% u; P    mcasp->regs->DITCTL     = 0x00000000; // Not used
+ N2 K7 a) O! T6 W% B2 U4 k' `    mcasp->regs->DLBCTL     = 0x00000000; // Not used
6 X+ H: O& ?- f+ d  [    mcasp->regs->AMUTE      = 0x00000000; // Not used. H, D9 i6 D; h9 l+ f

% i& J3 ^. j' ?( T. p/* Starting sections of the McASP*/
7 s- c3 G: g- E& R3 W9 o    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 5 l& `3 q4 ]% G1 M( w
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
! _; o! W' E# v* X9 v: L    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ) d1 c0 }. v9 `5 c! ?, \7 ]
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );" i5 V6 f+ r, T

" Z6 h- I" ~1 O1 J: h. C8 u    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
; S, [# |  u) r5 v    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
1 @8 S  e1 m8 {6 r    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
2 A' I9 g1 P4 y. D( ~. s    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );1 q) ^3 p# c7 g3 ^
2 U8 |& V' [% I- u5 o. S- c9 E
    mcasp->regs->XSTAT = 0x0000ffff; $ T% E( k8 d) w4 `4 I  a) L! {  n
    mcasp->regs->RSTAT = 0x0000ffff; 1 I+ S$ [- o7 k5 c7 \% M
- f& g7 o$ f: |) L& T
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
& x3 l4 x  b7 u8 L# `2 B    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );+ Z& b) m' ]; K* K2 I2 _
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
9 s; e  p8 x$ I1 _& Q/ x+ i    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
& g0 s' [" ^2 }+ l/ x. T4 U
: P7 i- H- R3 H! F) c3 }    /* Write a 0, so that no underrun occurs after releasing the state machine */
$ u8 i/ Y/ Z( R! D3 _# b    mcasp->regs->XBUF5 = 0;
" B" \' Q9 M% G    mcasp->regs->RBUF0 = 0;2 a1 y7 o4 H7 T1 m

) B' H  v/ _$ I    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
1 t2 p8 F( l1 A! d$ k3 [$ W+ Q1 {    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );3 B$ Q: J! Q6 H3 q) V/ [) r' `
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ; h0 ?5 @5 e0 R) H
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );4 n$ L# U2 C% l7 g. ?, M
+ F  m- y5 P# ^& `, U  o
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
9 o: q, L3 T$ r+ W% r" Z0 x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
/ \* a8 g' ?4 a    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 6 T, @" D$ k- ?$ I( ~  S
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. X7 E, q/ f1 _: H5 W1 |7 h4 X
' Y2 x- j$ G% T3 z7 N) ]' i
    CSR = 0x0000;5 R/ E) X& ], f) Z
    INTC_INTMUX1 = 0x3d;
! R5 S9 `4 u  V$ r& i    ISTP = (unsigned int)vectors;, s' C+ ~  o, o
    ICR = 0xFFF0;  $ j/ Y' U( _8 J% D' U1 T; A
    IER |= 0x12;  
" D8 u% i! g0 ?    CSR |= 0x01;  
2 ?$ l/ C) j7 ?  [( N0 u; e3 `8 ~% b1 @; D  p- r
% y( Q1 s; t% |" }( Q

8 Z  o* N# g7 S5 [/ l1 |& X2 x还有就是两个输入输出函数:4 l$ N4 ]5 Z8 h" D/ w) K
void output_sample(Int32 out_data)
5 p7 T& L7 k# V* I1 E8 I# m{  H0 b  N! U% Z  l' d: _$ I
  AIC31_data.uint = out_data;  % e4 Q2 j. T: a, d+ ?
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
5 B  L) G, I) I2 P: o! {4 y}; W6 V5 k* O  g, y  l; M

# g: q+ J) {9 \- z7 {Int32 input_sample(void)# S/ ]. A+ O. I$ y
{  3 Y+ x2 [& z2 ~. W  d3 X. T
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
6 }: C* Y, \4 A  F( O" x, K/ s  return (AIC31_data.uint);) V6 C, {; b" h: J# K" [
}
, d) g6 @. [; z" h1 n0 C; q$ a+ w, ]) N# K7 _# D; M) b4 h
分享到:  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-7 12:37 , Processed in 0.039901 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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