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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
, i. s& G0 x0 _; q2 e' M9 _( c7 Umain文件:
& ]. W  z# H6 {, ?$ linterrupt void interrupt4(void)  $ w1 z: M- U+ {4 f; l$ h
{9 x+ q; a' X( o7 O
  Uint32 sample;2 h" E3 _8 T3 t; V9 D

, Q! U* q0 L* f( H  sample = input_sample(); // read L + R samples from ADC/ g0 x1 V# i* A# i) q
  output_sample(sample);   // write L + R samples to DAC 5 m7 h- R% c& B! D& B
  return;. ~. t8 V* T6 U5 R6 \/ y- Y. K
}
- e, b: v6 Z% L/ d5 X# a$ T% q7 D) |) `* L4 T! m
int main( void )
- D/ |- [/ m' p- U% ?$ C4 F{. D" g! G5 U$ |

2 J9 }) J, J/ W- a* [- S    /* Initialize BSL */
! G( I6 n1 x; j3 G. T0 m" _9 Y% g    EVMC6747_init( );
8 z2 B' j# M- P) ?  q        /* Call evmc6747_intr function */
$ K' V$ ~# z1 s    aic3106_init( );
; R3 N" J/ B, v        while(1);( S. `6 W( w6 g. S( i6 `( S) _
}
5 _$ y; h+ W+ @, r( A! G; U/ z( _. S" `. o$ Z
3 M# R1 p. l. i8 ]- m; e% T! g
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题1 G) M% s# S' ~: s& R
/* Initialize MCASP1 */
5 J( Z! r8 y/ ~! I1 k4 |1 h6 O    mcasp = &MCASP_MODULE_1;
2 @4 W6 g7 G0 _6 r1 q) M    mcasp->regs->GBLCTL  = 0;       // Reset$ {; d# y2 s# q6 j. o7 B  S
    mcasp->regs->RGBLCTL = 0;       // Reset RX% i) e" v3 c- D/ R7 w
    mcasp->regs->XGBLCTL = 0;       // Reset TX- Y" W$ O' m; @- E
    mcasp->regs->PWRDEMU = 1;       // Free-running* G4 F8 _5 g4 ?% U# H
   // configure McASP0 receive registers
( ?9 j) M" H% u- c9 r$ D2 i8 j, l; x    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used2 a0 W  C& p/ l6 A
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus! N9 R% U: w3 f% Y
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word# Q/ Z2 y1 M# S+ O5 z$ a
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
6 N- S/ ~9 P, u    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
# E# Y  T, p6 g3 s    mcasp->regs->RTDM       = 0x00000003; // Slots 0,13 W1 E7 i: {: ^, t7 k  d
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
) U$ Y  ^4 z- Y    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
) s3 J6 d! S8 C% B, ^/ t
+ j8 R3 t* u) @/ ]8 F5 ~    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used- `( X' H& N8 ~6 `
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 ?" Q. W; p  y, E
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
, [. p" ]! Q. X$ e$ Y6 i& M: J2 I    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-161 Z/ o# I$ v" n5 m/ o
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK# i$ T% M6 Y5 }! R6 T" B
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,11 s" g! p1 A: L# s, V+ r- |
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
+ |" j" D3 S- `    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 m+ l$ u/ |+ {2 |0 w) N+ z7 b; m! n
. i+ l- z. _  B) J( v9 I- P
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
- ?  B3 B0 g: v    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
9 t- D# o! V5 `. r; C2 ]    mcasp->regs->PFUNC      = 0;          // All MCASPs! X& y; e7 G& J0 v
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX15 I. C0 S3 W0 y8 O! R' U

" S  u6 `! B% x* \2 q1 h    mcasp->regs->DITCTL     = 0x00000000; // Not used8 z" K% `) e) O# v
    mcasp->regs->DLBCTL     = 0x00000000; // Not used& L; c* Q/ K# B2 y  _+ L) D
    mcasp->regs->AMUTE      = 0x00000000; // Not used
% T. ?6 u, R: c, @$ S' C  I4 p  @2 T7 a! I5 O
/* Starting sections of the McASP*/+ ]5 [/ l( ~+ V; X* s1 @. c
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
" @  e4 P  e! }- j    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
' _) E/ n3 H; r/ Q2 D& N* n' J- F3 E+ f    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
* o( N) |. K) m& N  s9 ?8 C& u    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
# s3 G1 d( z* u* H$ G) w* [
" l3 s" b6 z: d* \4 V    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; , M5 m; D/ _) U2 h" B2 D) X
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
7 [& {4 [: t! b8 a    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ' Z2 v6 w8 a5 {' P8 Q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
/ q$ m4 \6 }% T, M/ [: e& \/ ^
: B5 i& i- _( d% X3 f8 P    mcasp->regs->XSTAT = 0x0000ffff; $ L" L7 u4 l9 m$ ~+ F+ E
    mcasp->regs->RSTAT = 0x0000ffff;
& F. o& H, V% ~3 O1 t1 i' S& E6 M- r" O/ t" p
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;' a; M( K$ Q9 O# }* {! r2 m
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
3 C/ y" R- Y( i. I    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; # q# i% U  n1 M
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );0 k  q7 q0 f  |& W/ f# M. u  [  a' ]
. a- {9 H' W2 V& g* J
    /* Write a 0, so that no underrun occurs after releasing the state machine */
  q5 C) P) o% {0 Z    mcasp->regs->XBUF5 = 0;
8 O* E: E6 [. P0 p* \; _8 W    mcasp->regs->RBUF0 = 0;/ n1 j9 y. R6 L. Z3 v* F
0 H( q! [1 ~8 K
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
: f8 L$ m- t$ \9 t    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );- b9 k& r9 c- g0 _+ Z" c- J
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
( Z- m* K0 w; H' `1 a+ a    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );* g& h" @5 c4 g' d: X
. ]$ P, r9 Z. I2 c
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
( F$ u7 K1 m) X# m% s& m6 q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );& J3 ~: o% W: O# t# s$ @
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; / c3 r  y! c* H- {8 D; \
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );  y3 z/ o7 \% O

* c" d9 k' S& d, I9 ^- p8 ^    CSR = 0x0000;. r9 C' f  A3 \' i: t
    INTC_INTMUX1 = 0x3d;
2 _) p! i8 G& D6 Z/ r: L    ISTP = (unsigned int)vectors;
5 v& p8 j. |. K8 n    ICR = 0xFFF0;  
& C. f' J6 {8 A( _    IER |= 0x12;  
/ x0 x( R. @. ]    CSR |= 0x01;  
" J; m- J8 b: m2 z+ K9 i* D7 e. e- M6 ^2 w1 W. D2 J2 ]

$ k) s0 R# u0 D4 h" g% P9 [) w' U. j7 ~7 M4 e  S0 ^
还有就是两个输入输出函数:
8 \9 z/ n. `; o* R$ ?, o: b" Yvoid output_sample(Int32 out_data)
* I6 G) x0 T4 Q+ Y6 J% F; m. l{
8 \( u) U: \1 @- ?6 t  AIC31_data.uint = out_data;    q! c6 J& F+ i) z: `
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
5 c$ V0 T0 J1 t: g9 k}
# [( e+ v! N5 C9 T5 B+ e0 f9 C: y; B" {% j. U" q
Int32 input_sample(void)
1 T% Z, T; C' z8 Y" s: S{  
: N7 J9 c' P3 Y) q! e  AIC31_data.uint = MCASP1_RBUF0_32BIT;3 x9 S0 Z# q, x- q5 C# E6 L; D$ c2 M1 ~8 q
  return (AIC31_data.uint);" ~1 ?- U( I8 Z
}
5 `+ N( r# {+ M, r4 X& V4 l
* L& N0 k* Q8 k' w2 f7 \
分享到:  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-16 10:47 , Processed in 0.049347 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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