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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:: Y7 D% t+ l+ D7 r, j% `6 _% c9 k
main文件:
& \9 k/ g1 K5 F& [. einterrupt void interrupt4(void)  4 j. a! h2 o2 P
{* K5 Y/ Y, n" V, n& G
  Uint32 sample;! \3 w' z4 s4 Q, J" g, S% z. T1 W

% Q5 b9 t. \, a  sample = input_sample(); // read L + R samples from ADC
* S5 B( [; R: f! m% K" n# N2 N! j  output_sample(sample);   // write L + R samples to DAC
6 ]! y; Z) G4 l, w  return;
, A" K! n% z& H  P& e  B}5 \4 k& i4 d* C

) N8 z, r6 f0 [: h& ~  cint main( void )7 P4 b3 o, \" L9 _; H+ N& }4 U1 a
{6 Y$ A" O$ H! }- K! v1 E
5 b3 m8 l) B. g  p1 y; Y4 z
    /* Initialize BSL */
$ |  ~/ ~' Y5 g  J    EVMC6747_init( );
! H4 C% d5 e, \/ w$ k1 @        /* Call evmc6747_intr function */
; Z0 f! m" M, ^' Z( O% f0 d    aic3106_init( );3 j) g+ d1 m! h4 I
        while(1);9 d& D% z$ F: m/ T
}6 J% [* z1 l+ k/ S. V; v( N) I
& f4 H% r4 {1 W- V+ V: S
( Y2 @3 ]* k6 S9 o
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题7 ?% @9 A# X4 S% m
/* Initialize MCASP1 */9 B5 [5 R9 ~4 w% t
    mcasp = &MCASP_MODULE_1;
# `- f5 N0 Q1 i6 `    mcasp->regs->GBLCTL  = 0;       // Reset/ f) n- e9 |5 ]5 Q9 c9 _
    mcasp->regs->RGBLCTL = 0;       // Reset RX  ^9 Q" `% r9 O1 U8 w
    mcasp->regs->XGBLCTL = 0;       // Reset TX
7 g, l+ U" `+ D! ~( X; {( X9 C- V    mcasp->regs->PWRDEMU = 1;       // Free-running! R; G, U' x$ [' L
   // configure McASP0 receive registers* i6 r0 t* y7 b' I% J
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used; b6 s/ J+ y) _: p3 W
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& V6 ^1 B1 O8 v' A( `/ Q9 ?( p    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word# {" s: |0 N$ U7 b  I- m- u4 r
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
2 y, R$ k9 m: D4 w7 `/ I    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)1 e% A+ p! k7 ?$ n( I& Y
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
/ r3 G( Y( Q/ ]    mcasp->regs->RINTCTL    = 0x00000000; // Not used
' s; K( O3 _7 ?( ]- R; }    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 h: B; p4 l/ U: Z% u' H3 c
/ k- k% ]( K: l2 U$ z6 Y" K    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used% ^7 J6 S( B9 }- r& g$ _
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! {7 ]" ~2 f; m0 j" O+ v+ H: N    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word3 Z; ^/ D6 w5 A& s
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-160 }$ i% x+ M2 Q& e" X2 n( q" L; \9 Y
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
! h3 M# K( x+ V% M( I" I/ P    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
: ^6 N6 y3 c2 h' ]( p' S* m    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
3 Z9 ]8 t$ Y, Y    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
) m4 ]4 V7 u0 P: \% p# I# i
+ a; E4 `+ \8 ^! j( m/ P3 j7 n    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
5 G' `% G8 g* t) T1 w" p' j    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
: E7 J0 B3 x( a0 F) M* u    mcasp->regs->PFUNC      = 0;          // All MCASPs
' W0 h( @9 n, v9 X$ z0 G' D' n    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
$ a0 j- r( c  }9 L
- k# o' k, ?! D# }- S+ r; T    mcasp->regs->DITCTL     = 0x00000000; // Not used$ i1 N+ f' [7 S6 ~3 e2 {8 o
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
9 ~7 @: Y: g( ~  i    mcasp->regs->AMUTE      = 0x00000000; // Not used
( \- R' C$ |# u& k8 [& ]3 h& g! X$ A1 z: c+ [6 n' s  N7 m
/* Starting sections of the McASP*/
! p. p2 E! l. x6 Y. R    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
* ]( j4 p! \& x8 Q1 J1 n$ n: R    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
; n- s9 C! A! ?! {7 A& u' C- ]) n    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; " O5 Z9 ]) h  q' V* E) a! V
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );. s0 t# p; h( g. v% a. [, x* c
# S6 r" W6 o3 k* D/ o& ]
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
0 S' w. ~* X+ }/ F: v2 Y) c    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );- K( G+ p" k2 O6 }' g: {
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
% ]: H9 R3 }- d- a. M    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );4 q7 r* g$ s* }+ h9 ~5 X* `( L# o2 \8 w

, K+ F& s7 g6 k    mcasp->regs->XSTAT = 0x0000ffff; + @3 w. N% u  g1 W' y2 ~5 m
    mcasp->regs->RSTAT = 0x0000ffff;
1 ?0 `. a3 z) C  e' p  S# b8 F+ y; j
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
; D) F. l0 m; u0 O. x, O    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );& a9 J4 E- z) g- S0 _
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
) s+ _5 L& w9 z* ?    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
2 X8 }; a' h$ I9 {" [" K& I( R7 @# @( F" N. k$ t, z
    /* Write a 0, so that no underrun occurs after releasing the state machine */
8 I9 V# x- }; \8 m: a  h    mcasp->regs->XBUF5 = 0;
3 I  U7 d6 Q% Z& Z/ i    mcasp->regs->RBUF0 = 0;
1 Q; F$ i2 k5 s5 z# y/ _6 S- n# Y. O% a0 O, T9 F% R- n
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
/ {  `# D3 X; M    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );# u2 U$ R" S( v- b; g
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; / l+ `8 s( p9 ^) Q4 s
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
( l3 G' M3 G7 s; \  ?5 s6 d* k! s' q: i2 J" x  I9 r( u+ s# s
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 8 O6 {; ~& r: b
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
$ D2 i1 }! |' S6 R1 x8 K    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
: H" z- V! o$ }2 A  Y: K5 g) a    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );! B$ p! q4 b3 d+ m) l/ Q

4 o7 a; W# z, y5 I  h    CSR = 0x0000;
- y" D: Q2 G- I4 X9 B    INTC_INTMUX1 = 0x3d;& n+ T) z* o0 @5 J6 _  h
    ISTP = (unsigned int)vectors;
6 r5 O! s- D' @4 P    ICR = 0xFFF0;  : a0 t4 ]' n/ u& _2 D8 k' i9 m
    IER |= 0x12;  & ~7 n  B5 ]1 M; Q& B4 i
    CSR |= 0x01;  ) q# v; [2 j; ^; \

$ x% r, W" }6 a( a! M4 f8 m5 y9 m5 i1 [+ u
5 J  l" }# R- q$ ~
还有就是两个输入输出函数:
9 E8 B3 B, W# @. t5 Qvoid output_sample(Int32 out_data)
5 [- i3 ?) K6 _; t' R' m$ J{
. q7 X/ z5 Z9 V& ]& Q  AIC31_data.uint = out_data;  
5 B' \, c& `+ |4 S" n: G7 o( S  MCASP1_XBUF5_32BIT = AIC31_data.uint;0 d8 _+ z$ T: `3 I- N7 c2 \' e" e
}5 G6 o# G: n. X8 }5 C

& b+ V& l3 l5 g# L8 XInt32 input_sample(void)! E% r3 M) X4 K& ^3 t6 Q
{  & c1 M- D) a8 K: t# ^9 v; h, M: i' L
  AIC31_data.uint = MCASP1_RBUF0_32BIT;. I+ T# E  |2 R1 l3 s- d) y
  return (AIC31_data.uint);6 W+ Q& q% z6 o& h
}4 O! f6 e, v, G; M( g
3 H2 [1 k$ y8 \1 A1 W
分享到:  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-2-1 19:50 , Processed in 0.040600 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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