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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
9 X$ d6 I8 ?. Tmain文件:
+ R& p# t0 n1 N' O* Q# j, S/ y" q1 Ninterrupt void interrupt4(void)    S! ^; x6 t  y$ }8 p+ R, A
{9 Y# V# a# C7 {) C. H4 \0 f" T0 E
  Uint32 sample;) D. e8 V" R" o+ E

+ |1 o" L: W: [* @% _- N  sample = input_sample(); // read L + R samples from ADC8 B, c9 L1 R2 B2 Q, X, t
  output_sample(sample);   // write L + R samples to DAC 4 n* Y2 h+ B8 }
  return;
3 Q2 O7 C4 ^. K# Y# X}
. m. q8 ^/ |+ \. ~2 U* a0 o3 _; ^0 G1 {' c" g
int main( void )" c* V+ v+ U. C) w. b& V4 x
{
5 Z" H6 A3 H0 G4 m# W
/ B# E" f" E5 s/ y0 J1 {    /* Initialize BSL */
; A% K$ ~; K( s% z8 V0 _    EVMC6747_init( );
, A' s: J9 M8 y        /* Call evmc6747_intr function */
9 W/ N6 ]2 X7 u6 s8 i; P5 r: B+ o    aic3106_init( );
' K* J/ j) v* f3 j( Q. z        while(1);, [$ U2 u5 q6 I' d/ K1 O/ t4 K
}/ z+ c& F2 E! O' A& l) f
- \) s. ?$ W2 Q4 i2 ?6 \2 s
" ]4 G- K+ l2 _# @0 w
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题3 l9 e9 V7 ?" H% A% Y
/* Initialize MCASP1 */
! y( _( @6 _3 g+ d3 i8 n    mcasp = &MCASP_MODULE_1;" D+ z; {3 B( ~, g$ j" C/ H
    mcasp->regs->GBLCTL  = 0;       // Reset( Q5 f1 C: Z$ E; u
    mcasp->regs->RGBLCTL = 0;       // Reset RX
6 F+ F' y! _8 V/ B; y& O    mcasp->regs->XGBLCTL = 0;       // Reset TX! I. U% z/ X# s6 ^! m% T
    mcasp->regs->PWRDEMU = 1;       // Free-running
% \1 [5 ^/ ~3 b% ~8 i& ~7 O   // configure McASP0 receive registers
7 w, B4 P' F, ]1 V    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
+ o. M; D6 E5 y3 ~    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; ~, I( N: q4 q5 S9 ?! f+ F    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
* v6 f" f3 U9 d0 p% S7 J" C6 M  S    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
$ e6 y9 v+ I) _" z4 a1 a( N    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)6 ?$ G: F6 o2 z
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,16 N/ n9 a' Q9 m9 |+ v* m' O
    mcasp->regs->RINTCTL    = 0x00000000; // Not used! {# l/ D& D# a* m& _
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256, F) {" |. Q* z% ]; J

" P3 z2 U* \+ |, @' e5 |    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
- Y  G, y& r5 R9 }7 D. w! H    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 `/ g4 A4 @4 p# G  h& b9 r    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
- T& ~% a! X5 N; j0 o& M    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
. [% h  C- T& R, s    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
5 z: G/ j& }! X% V: @4 ?    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
5 G' P: X% Z2 B5 n* ^4 }    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
' m& {" @0 q9 c4 H2 R/ z4 _    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, J) O2 Z5 T" M$ [4 X5 z; X& ]2 s1 b- w
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN: `( d; x1 l- Q0 l. E) S
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
+ E$ Z* ^$ \$ k    mcasp->regs->PFUNC      = 0;          // All MCASPs
1 _' L5 p# f3 M8 \* X" y+ Q    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
+ R% ]& d; F$ k1 I" ]  l, ]# z3 a! Y& I* c
    mcasp->regs->DITCTL     = 0x00000000; // Not used
; K! p5 @% S; b) ]9 y: n    mcasp->regs->DLBCTL     = 0x00000000; // Not used  j7 ^( x+ ~" j2 ~; W6 u2 ?' |: z
    mcasp->regs->AMUTE      = 0x00000000; // Not used
) x, ~% {7 ^. ~% e. Y$ x, _; C# t3 k$ G. j, R7 W& d
/* Starting sections of the McASP*/
. Y9 `# f; l$ a- u# a    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
. o- a  z. ]  L4 ~    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  . I: b! Z# o5 G. c: O8 l4 a. s8 x
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
! H9 H2 C5 o1 M& ~% H& l    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );. L" \7 z/ t9 I

. u4 G, \) N3 ^9 ]7 C0 T    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; $ ~9 W6 \" p; _% v5 V" L7 f
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );! E# K, E! K% r5 J- b. e) ]" f
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
( F. j0 a0 ]$ T    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );& M5 u6 ]6 A( g. a! v0 _
1 p4 T* V: d" u8 Q
    mcasp->regs->XSTAT = 0x0000ffff;
* {1 r1 Y* Z( |0 i0 _    mcasp->regs->RSTAT = 0x0000ffff;
# `) B/ {  D- r& D% r1 o" m& j; p+ L$ E
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- M9 b# R, O, w# j0 g3 ?    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );9 o6 P& m; y; k; m
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
7 w3 w0 m9 Q, E    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );6 a4 \* E5 ]! C: X/ V5 U! H* E3 B
( b$ q0 u: N0 F* _5 u; G
    /* Write a 0, so that no underrun occurs after releasing the state machine */
3 J+ l( {8 N' x! w# X7 Z: J* R    mcasp->regs->XBUF5 = 0;) c* d) L! Z0 u: |+ q; k
    mcasp->regs->RBUF0 = 0;
$ ?8 f) H6 Q" T! j+ O3 ~! d, |* a1 l4 D
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 D8 b$ o1 v' c" A1 Q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
$ [) B2 @, f1 S! r, a: o! `# f    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; + G+ h' j8 y4 E3 f' w! f( ~
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" [: r8 J% @) F7 a2 z; z

' [6 _7 ]; W/ z: Y3 J8 Z6 N    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 0 q4 Z9 ^/ p* h- X8 g  q% U
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );! z! v" @7 W. X7 ^2 ~
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; - G3 ?0 w/ N4 Z- z+ @# c/ T
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# F* m; J+ ]  k# t4 y& |. V" @2 O1 {: i
    CSR = 0x0000;& q* r5 V( n* A, d0 p2 u
    INTC_INTMUX1 = 0x3d;
) U* P3 C) ~/ I$ [& m    ISTP = (unsigned int)vectors;
. O, g/ i; E4 m& N% }: j) Z' g- c+ S    ICR = 0xFFF0;    d4 s% Q5 g# X1 P. O- u9 d" \
    IER |= 0x12;  
: B( V% \4 m3 N% |& G    CSR |= 0x01;  8 H; S" A) E0 S

+ ]4 ~2 v: T2 L! F# R) c
/ e& Q+ X- b- I( X( S- @5 i$ j# J. A8 b
还有就是两个输入输出函数:3 \+ {, h8 H4 R6 U7 k6 O/ ~1 g
void output_sample(Int32 out_data)1 M% o. s( [+ s9 U0 {( O: m9 ^7 R) Q+ T
{' Z% I# \) Z# k) N- {
  AIC31_data.uint = out_data;  
3 m; @4 O3 c' u" x  MCASP1_XBUF5_32BIT = AIC31_data.uint;
4 {! N' l+ D  q# R& ?0 V; O}) c( T/ O% Y8 Y6 x* H  s

% n" R* b: E( \Int32 input_sample(void): [( Z( {2 {" E
{  " @$ m5 \% Z, `1 ^4 v  V- }) l. d
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
" J/ a  r0 E- d7 p/ D9 q% z& s  return (AIC31_data.uint);2 G$ F# `4 k" I, j
}
3 O( F  }# ?, b2 ?/ z1 n# k  W  b* n' e6 ]
分享到:  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-25 02:56 , Processed in 0.037922 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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