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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
6 X. C( I) u, ]+ K2 J0 ^3 `main文件:
: R7 _' T) @! m, Q, U$ yinterrupt void interrupt4(void)  
- {, q- n1 f. F{/ O' w% L) K- S. ?* m9 d' M; K" [
  Uint32 sample;* |  U% K3 r! B0 k: @  z! N
  j, ^  C$ t  y" }) U
  sample = input_sample(); // read L + R samples from ADC5 `) z1 p' l' A( N; ^
  output_sample(sample);   // write L + R samples to DAC
% `1 n+ u8 a& J, |+ R' L; Q  return;# r9 a# H  @7 g: {: n
}
. E; B$ U/ u9 o( ~& ~5 l% m5 h$ l/ i4 U: K6 b- }
int main( void ); ?$ s$ O( X) w' I
{5 d# l: m1 U* b; l$ U

+ P4 F+ `; {) T2 R    /* Initialize BSL */
; U& B. g7 D  n* A4 P2 G4 S    EVMC6747_init( );
' U$ m; C, y1 a% l, ]' L  Q        /* Call evmc6747_intr function */
9 e+ [) x6 @3 @' p+ ?! G    aic3106_init( );
1 h3 v0 J! x6 ]: l2 B$ d: o        while(1);* }; f5 C5 Y2 _' E
}
0 G2 J% A$ Q1 J( c; @# n$ _+ X0 `! I# ?( \/ _8 l2 q& V# o1 ^0 \: |
/ ~# R- ~3 g# U9 ^# b. |" f
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
/ a8 }9 n. E( M% E/* Initialize MCASP1 */% q8 @: Z" T% M  V
    mcasp = &MCASP_MODULE_1;
9 O. N; P2 v5 N! P; K; i    mcasp->regs->GBLCTL  = 0;       // Reset
6 \& z/ j1 d9 J    mcasp->regs->RGBLCTL = 0;       // Reset RX7 Z/ L! f* P; s5 {4 O
    mcasp->regs->XGBLCTL = 0;       // Reset TX
% m1 a' |4 t$ d    mcasp->regs->PWRDEMU = 1;       // Free-running" M4 w# ~- a: {, O
   // configure McASP0 receive registers  ?$ S# o+ ?! V, }+ V0 |0 n
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
4 N" B; Z" I. J' t' ~" @+ O6 v% ^: Y    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 W. o9 P: l5 f: e, h7 w
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word' d) {: @, S  E$ L
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
: A& b( `0 F+ o- Q" r# E- _' b6 q    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)0 W* E$ {+ k/ c6 k9 O
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1' s0 E, G" h. a6 p/ z: K, P( [
    mcasp->regs->RINTCTL    = 0x00000000; // Not used) C: r; W/ H7 R1 B7 Z& P7 W
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 W2 H5 j8 h1 H# K" T+ r- r4 q, }+ D, w) }
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used0 d+ P* b/ h6 \& M) Z( D
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 p4 ?7 T6 u7 F! @% E, v% u& p% Y    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word9 X5 r, Q8 K( o7 Q9 H1 w% G: W: [* y
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-168 s3 }& t0 u) r# z1 L4 k# q
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
) C; C+ R6 a/ y    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
; z( o' T% K/ ^* ~2 G5 X& C8 L/ i9 {    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
* L5 D: |8 D% X  p9 S5 ?! t" m    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 d# T5 v* ?+ ?! [! Z$ ]

: ]+ G7 A0 t6 J9 Y9 q: c    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
- f. J  r6 g6 P5 u6 z& ^    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT! m& z/ U" C8 r5 e
    mcasp->regs->PFUNC      = 0;          // All MCASPs
) j( w3 e( d6 _+ R' h& D+ P    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1: v$ e1 W7 b' g
' f& F  ~" M% e7 ~- D
    mcasp->regs->DITCTL     = 0x00000000; // Not used1 U" l5 S8 R1 ^% I# a
    mcasp->regs->DLBCTL     = 0x00000000; // Not used$ g4 e0 I' d' V" n( v( c2 [
    mcasp->regs->AMUTE      = 0x00000000; // Not used# Y& R8 K# e9 {& H" e. a, A
% F) g' i) @7 k
/* Starting sections of the McASP*/
1 M' U  N* c5 f7 K    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
& S, j3 ^! T9 a' a) v! L' \    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ; h3 B3 f* A; w/ K* T# F& g7 J
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; " @. \* ]3 I4 L/ @" Y  k
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
$ A( V3 W0 M+ q8 k7 {/ p
0 K/ j$ C+ ^1 x    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
, d/ b/ v4 ~3 C( }2 n" p- s% o    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );5 L9 Q4 b) h5 p7 M/ H
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; $ V& I0 }' p1 Y5 Y& M
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
. D- X" C2 C% o# a
: O- B% F* U9 M$ W2 L0 @8 C) \  ~    mcasp->regs->XSTAT = 0x0000ffff; " e1 `$ |4 Q/ }; _7 @" D
    mcasp->regs->RSTAT = 0x0000ffff;
$ k4 y% E  Y/ X% K
& H. M% K1 |. N' ~& s    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;' t2 `' ?1 M8 a* U9 i- S
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );+ D1 E$ ~* i; n9 v& f  }
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
# c/ i0 R# S) p8 }" Q0 y0 Z3 ?    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
! \3 C+ q1 a3 B9 f* d# e4 o! w- d2 ^$ q; x
    /* Write a 0, so that no underrun occurs after releasing the state machine */
4 Q8 X; v- m" A    mcasp->regs->XBUF5 = 0;6 {) r" P, M, S6 N2 a' e9 D' S
    mcasp->regs->RBUF0 = 0;' L4 I4 S& O0 S9 w- r

8 v8 _# A) g2 s    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
  b+ q# @6 ?1 {    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
4 n$ S- B% g$ d- g- U' P    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
6 Q6 P. O" S* k6 N$ c+ G+ P    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
; I9 e: N/ a+ u& o
6 R: K; H5 i8 n  l4 L* h  f    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; # v+ Q9 B. ?* |4 x' r
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
5 U% r  l1 ~) ~6 c# R0 y! Y4 c- o    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ) [0 m8 M9 C' c4 e; }
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );( m# k$ k) J' c+ Z* }
# g0 i! o% t! A/ d; H
    CSR = 0x0000;
$ ?2 Z2 \8 y- P% X+ J2 {9 x- {    INTC_INTMUX1 = 0x3d;
6 m. F4 l. ^/ K" p& E2 X    ISTP = (unsigned int)vectors;
  X0 M+ \' M, `. X: _7 g    ICR = 0xFFF0;  
/ a' A+ v* G$ i. R) ~# g$ O0 T7 w    IER |= 0x12;  8 T/ t$ U! X% ^8 R. x' \* q
    CSR |= 0x01;  
. @8 m3 G& W  t' P- E
! z7 C9 j  `; b% M$ j! @; D" ^: J( {  o7 @1 v" H

6 o: W- E) O; S4 g% o还有就是两个输入输出函数:
- F- y; J8 I' a# B% mvoid output_sample(Int32 out_data)3 P+ e" q- t6 [
{
. h+ C, ]% n' C) ^  f6 t7 q6 a  AIC31_data.uint = out_data;  
9 b5 G: ~7 }! I% P6 y  H' ?  MCASP1_XBUF5_32BIT = AIC31_data.uint;: y# c8 [/ [, R$ j
}
' e9 v9 Q) k4 w! p" ]
: q" P# U' b' i' {Int32 input_sample(void)! o: a  u: R' r: M$ Z, @. M
{  - {3 P% E- k8 e4 i
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
. n! e' j9 [4 Z' K  return (AIC31_data.uint);
) s/ L; ^- i8 T" @}
7 o! `* H2 G! D+ C% M8 L3 y* ?
* V5 g# W; a# a% B
分享到:  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-19 18:46 , Processed in 0.040652 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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