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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
" ~8 Z+ s* R. w6 B0 M* tmain文件:
' n4 L; V' `$ W; @/ k2 z4 A* ]3 ginterrupt void interrupt4(void)  
0 H/ `' u$ l4 e3 M- h{# y3 y0 b* Z. |# a6 A0 `' u, |
  Uint32 sample;
7 |7 N7 {% M+ w( L5 e# G; a" Q7 h  b7 ^8 X
  sample = input_sample(); // read L + R samples from ADC
2 a: E* E5 i' V' r7 p  output_sample(sample);   // write L + R samples to DAC
0 V7 i+ u$ Z* i* ^# O  return;
7 I1 {" ^: E/ @1 o}
: i6 O, b6 y* J1 f7 Y
% G& S4 h, K+ Aint main( void )
6 @0 d6 r8 M" {) F1 E. _{
, t. i. V2 y/ v6 h/ N) {! K) B2 G) }3 M$ M% L
    /* Initialize BSL */( W# x- j" [( W! o/ O0 @! v
    EVMC6747_init( );
+ H6 W/ w+ Q5 @' e        /* Call evmc6747_intr function */
: Z1 ?/ o0 y6 n    aic3106_init( );& u7 O# Q, ^; D
        while(1);
; o" m  x+ y5 ]}% d, i  @# F! ?3 i2 o

. P* g0 O9 r! U; }& V0 `. t: V, ]4 B
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题" |( f/ y8 @5 d7 J- V% e
/* Initialize MCASP1 */
8 i6 r$ Q, t2 G# F    mcasp = &MCASP_MODULE_1;
8 h! ~/ C9 D  T. Y$ H    mcasp->regs->GBLCTL  = 0;       // Reset
  `" k' r0 B6 N. R. g' V    mcasp->regs->RGBLCTL = 0;       // Reset RX* w9 c" V' _: V$ v0 G( g5 S/ w9 u& d
    mcasp->regs->XGBLCTL = 0;       // Reset TX" I7 H7 D" X% v& b+ S
    mcasp->regs->PWRDEMU = 1;       // Free-running
6 K7 l9 ^& e7 ^3 M( ]   // configure McASP0 receive registers7 A( e* A; @# ]2 M$ i% T+ |  u4 U8 K
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
* e( Y# W6 P( c    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 `  T" y4 |0 _5 w3 s
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word* e3 {8 w/ L" R9 M' L+ l
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)" R* B, W! W1 m& F  ^6 l, p
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
& P6 k5 G4 i" A5 j1 ^2 W* x8 j    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1: f+ _$ Q2 |7 S; ~' G
    mcasp->regs->RINTCTL    = 0x00000000; // Not used! n# e- H# n: t/ I7 Z
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 }7 Q" g" Q' F% @
4 @1 D/ E( P6 W' X% K4 l  o( }% ?
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
1 J; q9 I/ U, O# c) |- t    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% s) [0 v9 o! W7 Y5 D    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word2 M5 {. J3 C+ V
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
; e/ o7 u, |5 y& a( C7 [. Y! E    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK8 [, C1 r4 D; H) G0 ~0 F! A+ X2 n
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1' \/ ^' V# O) h* u$ y0 ?
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
2 u& o9 j# u+ ~# f  h0 y    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ v3 j: t6 M$ z9 V- R, G" ^
: g2 V4 n: ^1 X- Z+ a1 g
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
- Y& ~- u  k" ?    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
1 `( `; l- I2 W( b, P    mcasp->regs->PFUNC      = 0;          // All MCASPs! ]8 h& c4 G/ y3 [0 ]* k
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1) [8 M, h+ O2 ?. N
( E7 m  p5 V1 p% l, M
    mcasp->regs->DITCTL     = 0x00000000; // Not used
+ Q8 U6 C$ J/ q% f: L3 s9 h1 ^- R* t    mcasp->regs->DLBCTL     = 0x00000000; // Not used# l% d9 f; n8 M
    mcasp->regs->AMUTE      = 0x00000000; // Not used9 }5 C1 _, |; `& `

2 Q" D! c/ y( B# w1 c2 l& O/* Starting sections of the McASP*/; K. M- d; f5 o+ l  k4 K* T
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; , U3 W2 |% E5 ^8 V0 E* Z; I- W- y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ! O) k( B+ @9 m) ?
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
7 {, i  k3 T; L  o    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );( v% O( a5 H# Y( a
( S& R7 I# d: @6 C, J0 H: S8 ], N
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
$ E8 A& k. U& _4 }: Q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
6 h; Y& z1 b! Z    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; : [' R" @3 X- d* E8 t
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
& N( w. l' H. f0 l2 K1 z% @- T5 _* A( K4 P. L
    mcasp->regs->XSTAT = 0x0000ffff;
: `! I" \2 U! d6 l: Q( X/ E& r( K    mcasp->regs->RSTAT = 0x0000ffff; $ m1 s% |1 I; N$ a0 |
* a# \9 T$ F* C
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;: z* t* Z) N3 c" o4 b8 a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
5 _" Q2 f. A9 a5 k' j# |    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; . g1 C  X9 x1 m, V! _( L: O
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );# V+ [4 J; c+ h' g

) U$ p% W, }8 p- ~4 U2 t  _, z    /* Write a 0, so that no underrun occurs after releasing the state machine */
1 B) ?9 O+ p1 G) X4 Z    mcasp->regs->XBUF5 = 0;- o. H  @: `! n
    mcasp->regs->RBUF0 = 0;
. j$ s& H: W! C2 M; A0 a
. [6 m) A1 @; t& N  ^+ M    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
. v9 ?' D$ Q1 Z+ V" r, g    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );; K4 W' S" Y& L" s# s! l: q
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; + c% j% U7 B3 i7 p. g6 y6 a
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
' M) |2 ?/ D7 N
6 t! g  w: _. Y9 ^. ?  s. O* R    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
  J5 Q9 E  t, p2 H1 [; j    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );" [; r* O* M; a! G. P4 Y
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
3 k/ W& o! E  R) }; z; g& v) G& t    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
& A1 N# X& w- |  {, j$ Y" ^
# e) c; D) ~3 T1 Q    CSR = 0x0000;
; `7 v0 t# e. F: e# h9 J! G    INTC_INTMUX1 = 0x3d;
! M7 L2 U3 G( {3 F2 H1 j    ISTP = (unsigned int)vectors;  z: K3 `- L3 u! {9 t8 x
    ICR = 0xFFF0;  7 _/ B* [/ S) c8 J3 `
    IER |= 0x12;  ; G6 Y: w0 t2 j- a, J# q
    CSR |= 0x01;  : y+ X. M6 d4 B) \
9 D9 M4 P$ i) z

1 a# {: q2 \. E& f7 }/ @# J
- T+ x2 j8 T6 D还有就是两个输入输出函数:
2 H  a7 U9 l# g3 W( ?2 \: qvoid output_sample(Int32 out_data)
4 k" E& @" `# ~: U* A0 ^{; A9 K" Y; y( }0 m
  AIC31_data.uint = out_data;  
" T4 L4 @' r* D& V+ I& K/ ~" M9 l  MCASP1_XBUF5_32BIT = AIC31_data.uint;$ p) z, k! Q; X1 ]) `+ c4 z0 C
}
. ]2 n0 k) U, x" ~7 `* H, y% j4 u! |8 Z9 i' H( {
Int32 input_sample(void): G2 x6 f9 D& i* o7 r) S
{  $ V: P( o9 ]6 _2 U+ D+ R
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
: z1 c/ v+ y) s1 S( D  return (AIC31_data.uint);) V1 ^& M0 K  ^$ R4 f9 S" v
}
7 f3 x" A- d7 Q5 Y- k* m7 Y; `! u, T9 \
分享到:  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-21 23:54 , Processed in 0.044843 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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