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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:4 N0 M; d" I1 ?! m6 l/ N7 Q2 h7 F
main文件:; a2 {8 h8 F* b; c9 Y  j: z
interrupt void interrupt4(void)  
* ~/ ^0 \8 y' ]$ ^+ |{
- @3 ]2 u6 D0 n6 f, U/ U& x' o  Uint32 sample;
/ m4 p; e; C7 [$ ?& e* Z- ~6 D. ~9 O; ?+ ]5 D+ x
  sample = input_sample(); // read L + R samples from ADC
$ }3 E  U4 r0 K' I& x9 ?; n: f  output_sample(sample);   // write L + R samples to DAC * J( q6 H' I% L9 n( `9 w% x% q
  return;
/ A1 N! H4 C& y7 y$ F" {. l}8 o& d/ X, y0 a  H7 I( s

8 z1 V! A3 y0 A5 _: @int main( void )' S* G5 P- a8 {1 I5 U" z1 h
{1 L, p% x* a/ Y2 }: }

3 _7 F9 j& ~: l: {    /* Initialize BSL */
5 W2 D1 m) |+ c% K    EVMC6747_init( );
5 g: ~/ f6 N/ \, F3 I        /* Call evmc6747_intr function */
- y8 p5 W& l9 J9 J- l! I    aic3106_init( );
- \5 d: E3 x* e! i; d( }. j        while(1);
/ h, j0 s9 m: U9 z, `  t' t' b}
3 J5 l7 ^8 m1 Y5 f* L9 ]+ ^# N7 P/ _
7 @) q; p1 I- j- G# A5 y0 I, x& w6 B" l
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
; h! @4 n$ C" [3 z/ w5 p/ Z/* Initialize MCASP1 */
/ i. m( O& X% u+ v6 N2 p    mcasp = &MCASP_MODULE_1;
7 @3 F$ i) k5 R* g    mcasp->regs->GBLCTL  = 0;       // Reset
, m( M  c$ T+ u1 R+ b8 r    mcasp->regs->RGBLCTL = 0;       // Reset RX# P3 b0 }0 I8 }6 ]. P6 q( E" {
    mcasp->regs->XGBLCTL = 0;       // Reset TX7 o: N) l( I- ^% i* ?/ R
    mcasp->regs->PWRDEMU = 1;       // Free-running
3 e: p8 f- x9 h   // configure McASP0 receive registers3 C# i# B9 x/ j$ H* d$ y
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used9 i4 `0 R& F5 M0 U& I' M) x
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 Z- ~7 O) h3 ~
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word  q9 K* n' n% h5 n) T$ ~6 @% i3 \
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
/ ?8 G/ k: ^5 K# h0 ]    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)3 F1 P: _: Q5 A. J9 _. {: l  E
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
8 Z. l- ^( p, @    mcasp->regs->RINTCTL    = 0x00000000; // Not used. D2 k4 |+ c% o: [  N1 S
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
9 N2 @/ h" N2 P( y4 c/ B  ~' U* D* ^: S' F! z9 `
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used: g2 N5 y% i* |: V
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" f# ]* l$ [2 D& O% _
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word* y! |+ T0 o# i4 l
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16  [, _1 c* m* `, l
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
" q' @. g) i) a' T' X7 u5 o+ i8 [    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1  n* w8 l  @' y/ J# A% K& r
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit% ]3 |' I7 C7 Z3 t; _/ O
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 L, q; H6 W5 S! s. ?

5 G: s% T$ _7 Q' p; W0 S    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
! \& R4 T' b) A8 Z1 ]8 A; I/ D2 U    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
; P% v: w# L/ V    mcasp->regs->PFUNC      = 0;          // All MCASPs$ x0 x  f$ Y' Y
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1, ?! }* f  _3 j# d$ D6 E7 O
2 H& X2 H# [% z5 f/ c) F' S
    mcasp->regs->DITCTL     = 0x00000000; // Not used  D5 o8 y0 D: ]* A. d# {2 n. c
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
5 ]" N# S3 ^$ d" V3 |+ H9 h* W    mcasp->regs->AMUTE      = 0x00000000; // Not used( m0 x/ o0 W. h0 a/ g
4 Y$ |1 Y( z! C4 M
/* Starting sections of the McASP*/+ ?, [* M8 v7 d6 ~
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
3 J3 |9 Y! F; H% S6 \    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
8 b2 O* M: _2 e! ~0 f# K    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; & F% Z$ i$ @+ t! E/ e) q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );" V5 |7 w7 K/ [, {
7 u, ^7 I' o/ Q
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
8 t/ d6 a, A1 p6 s* X) p7 V9 g    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
/ q* M5 y. I. M    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;   ^6 f" ^- k. d! p% z6 ^
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );5 u/ L4 Q, u' u4 t6 v" S
+ U; x8 P( `# a1 E6 q0 r
    mcasp->regs->XSTAT = 0x0000ffff;
( R4 Q( I2 @, V3 D3 \: f2 k0 L( @' Y. }    mcasp->regs->RSTAT = 0x0000ffff;
! r' f9 V+ x6 j1 u- y9 j2 o4 f  c. m! m: L* z
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;; u7 A' N# R7 J; T
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
6 Z4 r' t' E5 \    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;   ]$ [$ M! Y# T( _( _( ]
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );' T* L3 C3 v0 u3 G5 o7 H
3 F* U: R6 L* K
    /* Write a 0, so that no underrun occurs after releasing the state machine */8 N) a0 Z, O; x3 a0 ^
    mcasp->regs->XBUF5 = 0;
* ^7 e3 I6 x2 I, E9 f8 }    mcasp->regs->RBUF0 = 0;# W; E- x% U' ~0 k- s+ P. L; ^2 `
1 B! I. w+ J& k% y7 ^
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 0 {2 W7 S* s! b4 f9 c; _
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
# m& {4 P$ p% o, a* ?- E; Z2 T    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; " R6 ^; [; \2 t/ \" j& [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
) {" B2 @0 D6 H0 C, l( k" n" L" J$ {
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ' m% q1 H# J2 X. l
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );+ z+ Q$ j* r& d2 _5 J+ z
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
# }: P5 L. b* L$ f* _/ V  y) w/ A    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );& W( ~+ ^7 @% k4 z& ]
" s+ v3 p2 V. H  T% I- t5 Q
    CSR = 0x0000;
6 r! S- J# W- B" L9 [    INTC_INTMUX1 = 0x3d;$ H: y+ ^  o8 o" ?, P: K. }5 M
    ISTP = (unsigned int)vectors;$ X1 x" q. v% W" v( @4 e
    ICR = 0xFFF0;  
3 f9 r$ K( h- X, @& b; C1 s% O. N    IER |= 0x12;  
1 X2 u9 F  U6 x' H0 k. a/ l    CSR |= 0x01;  : V$ s" W* r. K3 x( F: y* D

8 t3 z: t! a+ f4 i, P
8 r6 N2 ^& \5 g4 T6 p5 ^5 s
: o& E2 |- W, \) q$ m# c还有就是两个输入输出函数:& q* r7 k( N3 @- ]; q7 \
void output_sample(Int32 out_data)' a# W. j( _# |, J% E
{9 D9 r8 O4 j* |) Q! j) b- y5 i# k
  AIC31_data.uint = out_data;  0 u' |2 J4 _2 H
  MCASP1_XBUF5_32BIT = AIC31_data.uint;( a# t. o2 F. r% |/ e- L. y
}
$ v, o/ a8 P- {1 ]& A! |% P$ u4 f, ]2 b5 d) `! @  p+ ?
Int32 input_sample(void)
$ j( M/ |3 J* g9 J; C+ A* E{  9 K6 }) D/ P6 m' q% y
  AIC31_data.uint = MCASP1_RBUF0_32BIT;4 ~$ k# C7 }; z, d; H
  return (AIC31_data.uint);8 R) a1 @9 X+ d0 A" ~
}
9 h* a3 @: ^8 A1 M- N- y& `
/ N( }" p2 W+ c" q! {, H0 r; H6 m
分享到:  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-1-16 12:17 , Processed in 0.047095 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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