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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:) \! y' _9 A/ I  M
main文件:
) \, T- i3 o6 R7 S& U" Pinterrupt void interrupt4(void)  ' l, A: |( e2 J6 `1 H; d
{
8 V% {7 i$ g) `# Q$ V  Uint32 sample;8 ?4 i4 {( j$ q5 K: Z! n7 G
; \. ?, S  |  N* z3 K
  sample = input_sample(); // read L + R samples from ADC
& g( U0 C* Z. u  output_sample(sample);   // write L + R samples to DAC
7 L& ?1 o1 ]: S1 Q9 r# y, u5 L  return;+ c, F) I. V* j4 c. i: r2 @
}
) Q' U; e1 H7 w! @; N; v/ k8 ^! {2 Z) H6 o
int main( void )" D8 t5 {) K9 Z- U$ C8 M
{3 {; _& x( f! i' U2 `* H

0 R2 v3 l8 Z% V) M3 a, ~    /* Initialize BSL */
/ t" Z) N- Z& `# q1 w. m    EVMC6747_init( );" I; w4 B# |, G+ A5 M3 `
        /* Call evmc6747_intr function */9 d' b  P+ Q% `4 T
    aic3106_init( );
) n0 G3 K) S6 p6 v4 n        while(1);
0 P5 x. _- P$ G( e}
; ^$ u: d( R6 \- O1 j) x& T  `" |6 l! ~1 @2 H; p

. y) E6 |& x# V+ ~0 X) x4 u2 saic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
: ^) ?2 R5 f6 `1 \7 B/* Initialize MCASP1 */
9 R- b! }% M6 j% E: H$ w    mcasp = &MCASP_MODULE_1;  N5 L! x& T% {) b: ]  H( r
    mcasp->regs->GBLCTL  = 0;       // Reset7 U8 \; Z- T3 y
    mcasp->regs->RGBLCTL = 0;       // Reset RX2 `1 d6 d. t' c  A
    mcasp->regs->XGBLCTL = 0;       // Reset TX4 w, d# I3 W! p" J3 F1 m# x9 Q7 E
    mcasp->regs->PWRDEMU = 1;       // Free-running( b" ?! C: Y9 ^2 l6 J# R+ o* o( J! T% C
   // configure McASP0 receive registers
* a" ~8 X) N3 Z7 c9 J; e4 b    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used  {/ W2 Q; X6 z' H& K
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 `6 V4 i# c, d! G7 N
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word; _+ R, E1 C. b0 r
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
% o) V3 i! t9 z+ n/ ?% b# d, J1 z    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)% C8 K1 U  l: N, i( m5 t! B- a- b
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1" b$ z0 @* H4 ~. ~( e) {) ]4 u
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
# r) n& {5 `5 p5 C6 ]  r    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" R& W3 d  u% G& \& J, h
+ p6 Q( T3 t3 u+ r& _7 g
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used* ^) {) o, u% e' e: |. E4 i
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus% }2 N( }: }- ?: k
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
( H( r7 a' p: w8 ?, @7 K0 z1 f    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16' Q* o  T: y' Z- j8 m' r
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK, s' `! `" S3 `. R9 K' X
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
' Z% t) L  w9 [; q9 l  Q    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit) I5 p! z! }  n; d  a" Z; U
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 U5 d+ a- J; ]2 M3 m; `4 _3 ?) n: x5 r, c3 o" h5 C
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN, X- P) _$ W& j- p5 ]5 g
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT( e3 N7 P6 [3 Q9 d  O
    mcasp->regs->PFUNC      = 0;          // All MCASPs9 q" q1 R$ W. ]' {# W' Y
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX11 a: @. k/ t$ X
5 ]; e5 B+ r5 q5 y$ B4 a
    mcasp->regs->DITCTL     = 0x00000000; // Not used
% t- B* F8 E. m; {: |" e    mcasp->regs->DLBCTL     = 0x00000000; // Not used
7 c5 l9 H( d. J' u4 l: _    mcasp->regs->AMUTE      = 0x00000000; // Not used
- W2 c7 s' k$ c# |( Y  P) z+ e7 T9 y  E! W! D. p
/* Starting sections of the McASP*/
- ?- X  U' ~5 {) G! V# z    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
2 X1 c; X7 J% {    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
& r; }  u/ O% V/ G    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; + }# D- [  V- a' ]. ~7 J, o* ?) a  D4 B
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );* K) ]  w- x2 x7 r# X2 H$ s( }, v
. j# o: X8 T. I, u+ r: M6 L
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
: y1 C* U% o. ]# U    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );: w) O) K! }/ y+ R8 w
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
! E; @, q4 ^9 r2 S6 D2 ^$ c9 W    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
9 u0 Y: t2 }$ T2 E3 w0 p4 p8 O7 l+ X1 d8 d4 Z6 j
    mcasp->regs->XSTAT = 0x0000ffff;
$ N+ R# @1 x) C5 v, \    mcasp->regs->RSTAT = 0x0000ffff;
7 Q3 _& X! }: C* I# w$ H- }1 i3 G8 X2 ~& T  e
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) T, r" P8 y8 q, J4 K0 C0 }    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
) \, n9 ?9 D& M4 r    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
1 i4 Y& F2 i" P( Q( r' h2 J' f) X% w    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );4 n; Y; I' J1 d& Z8 `

2 L- [; ]4 ^! S  |( e- t' E    /* Write a 0, so that no underrun occurs after releasing the state machine */
# }: _8 O" Y9 X% o: C0 z" t9 I    mcasp->regs->XBUF5 = 0;% k! ^  C6 ^$ X
    mcasp->regs->RBUF0 = 0;$ N6 b3 u! X6 v. `; g
% f! [9 X1 X- r! R- X" Q
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
& ]6 H6 w+ v7 ^/ T    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );( r( ~0 j  w) x; W* T
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; $ K: H% a1 i0 R& j
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
& z: C- k4 a. @' m% F( ~' v$ w& ?' ]0 ]! D" [$ A! V- J. A
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ( A& ^& x" W: M* F- _/ r
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );  s3 Y7 e# m7 s+ i  F
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 9 p& v) [# @, C9 c
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
9 N* a: }, [9 a7 O1 _6 g* C, B$ u- |
    CSR = 0x0000;
, R8 I4 ]. Q) x2 X5 b    INTC_INTMUX1 = 0x3d;  G- l+ ?! y4 h& v. @
    ISTP = (unsigned int)vectors;7 v5 H) `5 X8 d- O0 D) O. K
    ICR = 0xFFF0;  ( O" Y. e' m4 r; n1 G
    IER |= 0x12;  , w* \- G$ w# l5 l0 |
    CSR |= 0x01;  6 h+ j. k1 `; S: x0 n* a3 h# [

7 s+ z/ T% e+ p1 a+ _( W& @4 c8 C0 Y+ [. _

" |. @6 j% w. k; S. K还有就是两个输入输出函数:' h; U5 q3 r+ L# |; G) n
void output_sample(Int32 out_data); f  G% J# N% E) N7 M1 I
{: ^1 f( H. l+ R) ~
  AIC31_data.uint = out_data;  " Y0 D' ?' n- o7 l! \$ E
  MCASP1_XBUF5_32BIT = AIC31_data.uint;4 U0 R* N: I' D0 ^% z. p
}. b# A0 ?3 T) C. M3 r+ B

6 u2 [5 @, ]4 R6 g! a, yInt32 input_sample(void)" m3 I! E2 f, _; f! D; {
{  / u" f, i$ U4 A& T0 x' J
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
3 F2 M( L9 {: _* U0 H  return (AIC31_data.uint);
6 Q* P' E& A% @# A) @( X/ @4 p}
$ A7 G4 B& ]# i7 V# ^- e0 k# }' B0 T" \
分享到:  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-14 02:16 , Processed in 0.042298 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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