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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:6 d* F6 K* w8 @2 G& h$ M3 U
main文件:
  V3 s) J# T$ E4 q* f) xinterrupt void interrupt4(void)  
8 m# y% I$ V, r" ^9 O{
% R8 \- c. l2 h8 L  Uint32 sample;6 B0 U; H" D8 y; W/ X$ @

3 \' U) ?0 F  L+ k+ B+ }! v  sample = input_sample(); // read L + R samples from ADC. C5 o  |- m; U/ z2 t8 g' e6 a
  output_sample(sample);   // write L + R samples to DAC 9 m3 f7 C! u4 u' a
  return;# v. E' d% E- ^' J8 p8 Y
}
. W2 w$ G' G' z% E; h8 E3 M9 _+ q. N( _! J" E5 I
int main( void ): \1 K$ T8 H1 B
{0 P0 Z7 h' m& U$ [) p
) z! Z( l. c; Y0 x6 o
    /* Initialize BSL */
# x2 r0 q! ?: \  q8 Z    EVMC6747_init( );
5 O4 \8 u5 F; j  i4 m        /* Call evmc6747_intr function */; E) g/ M* h. V: P4 N# z7 i
    aic3106_init( );# T7 o; P- U$ [9 o: }1 o! ^
        while(1);
9 {$ I9 p/ }2 s1 C& r' D6 \+ ^" U}
9 z8 J5 w! @2 }2 |6 p# c- T* f: D" e- E( R2 A' q" A
- G- Y: h2 a5 w1 \3 ^; z( {
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题' ]- n# b6 A. s3 R% ~0 W: `5 w3 E  T9 [& b
/* Initialize MCASP1 */
, Y9 w7 H) j9 n, \    mcasp = &MCASP_MODULE_1;
3 E* S8 m( k7 f9 [/ k3 D& p% A    mcasp->regs->GBLCTL  = 0;       // Reset
/ g/ \% p1 M3 J) R) ?    mcasp->regs->RGBLCTL = 0;       // Reset RX# D2 H% q; `9 U/ h* Z
    mcasp->regs->XGBLCTL = 0;       // Reset TX: h; i. ^9 K6 l' B1 A- ~
    mcasp->regs->PWRDEMU = 1;       // Free-running" F) [' B# K7 t/ @; ]  T+ O
   // configure McASP0 receive registers; s# W( z2 n1 F0 B2 K
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used; C1 H7 G+ E! p+ l% X
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 r2 H  G* O, ?8 F, e& k
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
5 i  k; A) t1 S- ?5 e8 _+ g9 c    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)& c% A9 e' |: H  Q
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)1 l/ X$ b- G+ J6 o( `8 h
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
+ o& _! d* v6 B5 U    mcasp->regs->RINTCTL    = 0x00000000; // Not used
( Z) M/ K" T8 s, V3 H; L* U    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( h1 [) W: t4 J, g# h+ |8 D
- D7 h, `5 V% r8 B3 j
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
2 I& x" x) Q6 D: @+ E  j    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
* L% u: y4 Z0 G5 A  U* s! s    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word+ y+ ^& Y8 y6 P/ p; M& B" |% e4 W# ?
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16* ]; r) G+ Y% ^4 U* Y& T' j
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
* \# I% u5 F" n; J9 E  T! a    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1% \7 W' m0 l& _; h
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
* a- ]  Y" |1 T: g. r1 [) @/ V    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 q5 c' Z& b3 U1 A% i

* R; F5 r# E0 m0 D0 [! v    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN' C  M4 R: x# U' {- [: J' t3 ~
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT5 n5 f0 L5 A: i4 d( ^' W
    mcasp->regs->PFUNC      = 0;          // All MCASPs, \2 m: e9 ?" E
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
" E  s- A* N1 ^: `/ y' J7 Q
0 N6 U8 N! F% A; Q( }    mcasp->regs->DITCTL     = 0x00000000; // Not used
0 n- N" y. v. U8 w  l. [    mcasp->regs->DLBCTL     = 0x00000000; // Not used; A% |' I/ ^$ Y7 w/ g& l9 M
    mcasp->regs->AMUTE      = 0x00000000; // Not used
7 {7 F+ P4 H$ G) N8 A; v1 c4 J# ^- A' ~9 {: N* {
/* Starting sections of the McASP*/, F# s6 e6 R3 e4 F) C- J' M3 b
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; , p! b% C" D$ u
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
, f# J( `: T4 S6 v  U$ ~    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
0 W8 j# B# a! ~9 x2 H    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );& a( T( I! i$ F3 N" c9 ^

. H. o# A# R3 ~* s  R7 {# a    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 5 }8 }7 D; S) K% X- u  P* j
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );* L5 V' N$ G  g. H% ^& _* K
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ' P) `  ]- C* {
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
" d# ]# x8 V: w' K2 S. y. S! X( k# h& p. r# {3 Q7 K
    mcasp->regs->XSTAT = 0x0000ffff;   t# J9 d! V, m8 Z
    mcasp->regs->RSTAT = 0x0000ffff;
5 K+ P5 a' W4 [. o9 p: z8 H# y, ^- \9 w
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
" W) \( |8 N, {3 O7 C% m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
: C" P: |- q# a6 [$ _3 O+ Z7 `    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
) L# x2 z+ S4 P! u    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
6 S+ \" I- W& v
# p: \% x6 I2 }, n7 V    /* Write a 0, so that no underrun occurs after releasing the state machine */
' e! @& y; @9 q: o& V) L4 q  M    mcasp->regs->XBUF5 = 0;
7 L0 G, |& b# q2 M+ J. s9 m+ w5 {    mcasp->regs->RBUF0 = 0;
6 f0 U* X0 V" |" r# {" F
- {" w" a9 w2 y6 q' l& x  Q    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
9 N/ s2 m- y; i    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
$ ]  Q: L  A. r3 g& A: x/ g: ^( E$ T    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
* {9 q& ?% w: `! u) t    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );6 c; K- {3 k( m# V
. U) T9 G6 j( U+ _% g! g: M
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 0 S- N$ E9 q! |% z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );! J7 `: d# O5 @0 J$ F- f, I
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
- @1 z% ~& V2 J- V, S    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );" U3 F* u+ U% Z4 P) @7 f2 j
  _( B2 s, M- }" k0 O
    CSR = 0x0000;
9 ?  b* P3 a) [8 F! \, Q% ?    INTC_INTMUX1 = 0x3d;
- b9 N) W+ u1 {. l! x& [    ISTP = (unsigned int)vectors;; t2 }" C3 y$ q' h3 x* O
    ICR = 0xFFF0;  , |% l" Q2 Y* t5 q, G+ K( R$ v, `
    IER |= 0x12;  
' F4 \7 M/ l. u4 V, g    CSR |= 0x01;  
0 ~2 G+ g) S" x: l" R( D8 a- K2 A4 _! `1 N' L$ i- Y+ l

: F' m$ V$ u4 a5 O7 Y+ ^! j- \7 w2 I
6 O" D7 n& A" m2 Z+ a! M还有就是两个输入输出函数:/ \1 R$ q: t8 k1 K# K
void output_sample(Int32 out_data)
3 R! g4 H3 ^) K' }0 p( f{
8 I; M" X% \) n) U- C( h' ?0 K# q' {  AIC31_data.uint = out_data;  
4 X' _) _2 s5 ]% T  MCASP1_XBUF5_32BIT = AIC31_data.uint;
. ], B; k: b8 S# z! @}
4 C+ @1 f+ D( S9 b1 b
) u+ q  P( l+ h4 a7 cInt32 input_sample(void)
( M: g/ M2 |' k6 m{  
; T- d- X- V4 b- B  AIC31_data.uint = MCASP1_RBUF0_32BIT;
6 _1 S# z* b/ z# M) U& l  return (AIC31_data.uint);( N9 x: @% A& k
}3 @1 a% n' j$ l& A8 C. o

' v8 I4 t8 X9 j
分享到:  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-29 23:07 , Processed in 0.045156 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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