C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
) N! `, B/ |5 U8 Cmain文件:; q( M1 }9 l& M* n0 u; \( B, F- `
interrupt void interrupt4(void)  4 g# D. o- V" }+ i. A
{* N6 l, u: @; l
  Uint32 sample;
1 W! P! @* j6 [
* d, c, v/ m/ W0 ]  sample = input_sample(); // read L + R samples from ADC# }; Y  k! d8 b
  output_sample(sample);   // write L + R samples to DAC 0 i" H0 K5 {; D% M8 M4 }# X
  return;1 m7 M+ g7 t+ n1 H; b/ D& i
}
" j# g: V: y7 x% Y# k' S0 N& k1 j& A- E1 @
int main( void )4 |* m& F! |7 G: L9 I& ~8 M' E2 b
{
" H' n3 O) U  Q4 J% Q2 ^7 X1 e& y% [7 z7 D7 W1 r7 v* H
    /* Initialize BSL *// E* I$ F3 M3 u7 r, u! G
    EVMC6747_init( );" Q# R. z3 [) J4 k0 j
        /* Call evmc6747_intr function */
$ u) m6 Z3 F9 I+ l) T! f  Z    aic3106_init( );% x! W. `( ~$ V- W
        while(1);
, E1 q! P$ F: ^& j9 Y; m0 U: p1 x}' e. o4 X: N+ F( o. W6 a

7 E! Z: W3 R) ?: d- X  r: m& A. c' I& N/ M6 x
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
8 o1 i: H) e& k1 ?5 \/* Initialize MCASP1 */: v: X( D& {1 u/ `; O
    mcasp = &MCASP_MODULE_1;
! V( c( F: P( r/ A8 [    mcasp->regs->GBLCTL  = 0;       // Reset* g( L; I- R6 z4 r- e6 [
    mcasp->regs->RGBLCTL = 0;       // Reset RX
8 e& x% N. ~9 e" u1 N    mcasp->regs->XGBLCTL = 0;       // Reset TX
/ w8 Q3 E; Y4 q! N    mcasp->regs->PWRDEMU = 1;       // Free-running/ X, A# _* B; k% M$ h- L, p4 |" g
   // configure McASP0 receive registers9 |9 S5 k5 ^; X! ?/ @& i3 v( |
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used. y$ ?5 g6 l4 p# d
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( B! |- E& d! k* b% f/ `    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
' e, I5 _8 q% `    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
& Z  W$ U# d9 U+ M6 e    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)6 O0 j5 V9 j8 d+ o0 r( I
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
0 \0 Y- m; d# P! T8 o2 b    mcasp->regs->RINTCTL    = 0x00000000; // Not used0 t( L# B$ ]( L2 `* _
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
+ `( a  B- R- H9 u+ N! @" T4 \- [0 l
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used3 e. v$ Q4 O1 j, B: G) P: l, j
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
) X( }4 i8 U  `7 z- A    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word+ J4 b) {* i/ t0 V* m' ]/ S# y
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
6 j& i$ I" m2 y/ h* ~3 `% W; v; C    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
, m* m" t6 E! U    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
+ A0 P+ A3 _; l/ `    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
) Q! Y" Y. _: i% F( }- w    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256+ d6 ~$ E# b% N* T- |- o; \7 @

6 F$ Y3 ^9 G9 z    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
6 c: t3 r% W% C& b    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT* n4 u$ c( O2 ~6 O$ t% M
    mcasp->regs->PFUNC      = 0;          // All MCASPs$ v( J! [3 P; U3 L3 U. D6 c2 @
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
& _% ?" N: q& c' t) y+ W
( D  x7 t$ j6 ^' A0 x" i  A    mcasp->regs->DITCTL     = 0x00000000; // Not used# W' R; N1 E  E' I9 B
    mcasp->regs->DLBCTL     = 0x00000000; // Not used; W$ D4 T( C1 }
    mcasp->regs->AMUTE      = 0x00000000; // Not used
2 F8 x8 j5 m! `/ ^4 m0 }+ }7 F
! M- c# q- x4 E0 v  R" L! E. c' f3 s/* Starting sections of the McASP*/
* X- G  h# M. D    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ; D! D4 X, M8 h, }8 t" n5 ]8 q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );    c5 k" U' q4 `- N
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
4 c  p* O8 l% R& i5 @+ t    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
# I' n1 ~8 C; ?% j4 g/ `0 N
# X/ e/ l) f! k    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
" i6 T6 ~9 ~# w0 }4 H  a    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
/ o1 z2 B  K' f  V( h6 Z    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 0 _; z8 S: R+ G% K- N1 E2 ~$ h
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
% t0 M6 b9 L+ I+ M' i( M
  j: \2 }2 W) R9 P9 L    mcasp->regs->XSTAT = 0x0000ffff;
2 u, C; N% R' N& i( z8 {    mcasp->regs->RSTAT = 0x0000ffff;
9 N- f& S# Z8 G! F) \0 d4 n4 o
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
; x6 H7 f: R% ^4 n0 U* w+ u    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );0 N. l: Y3 o9 h- v- u( z  b
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
. ?% V+ c2 D* @! V1 Z( Q4 Q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );2 n- r) N$ K7 b* p& E& x

5 z9 t; Z, C" N4 n7 G1 d5 c# O    /* Write a 0, so that no underrun occurs after releasing the state machine */
4 n6 z1 g7 E+ Y+ f4 r3 m% J    mcasp->regs->XBUF5 = 0;
, ]" I8 I; C3 r' r    mcasp->regs->RBUF0 = 0;
9 K: ?4 `2 W# B- W  I/ A& B0 k3 x' Q& ~) ^
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 r; q  G. s" Y0 T+ L    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );# \8 D5 W* f& O- t; M+ C9 C
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
+ C  K& A8 A1 F7 X! \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );+ Q' U% i5 ?# N" X

2 M. e2 S8 m9 y% |5 ?1 N2 {    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
$ `- n5 U$ |7 M* ]6 A    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
8 _; w, @8 W. h    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; / f* N2 w$ M1 ~, ~* V; C$ N
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
7 U1 w2 N; n7 L/ i! h
8 F. Q0 I. R# ^6 Y    CSR = 0x0000;
; u' X; [& T7 ^- O( |& S  `    INTC_INTMUX1 = 0x3d;8 i: N- B) g$ S+ ?5 ]& x, v
    ISTP = (unsigned int)vectors;
- I7 D6 L0 {/ q$ U3 i    ICR = 0xFFF0;  
% l5 t2 F1 ^4 T, j    IER |= 0x12;  ; v5 |- I( \' w3 o
    CSR |= 0x01;  7 E" \' j* v4 u
3 G1 Y9 Q% [5 {  ]7 g/ S; e. P

! f4 K7 [* K5 z+ j. t  C. h- G5 `3 s) {. \  y/ y7 r  [
还有就是两个输入输出函数:
8 X. Y& u* \0 Q& I2 I8 Svoid output_sample(Int32 out_data)
& c; i+ r4 c2 p7 x" n8 {5 @{  E: _8 ^+ G) L% W8 Y  q! n0 r
  AIC31_data.uint = out_data;  
; ]/ K# G# s8 d2 v$ C  MCASP1_XBUF5_32BIT = AIC31_data.uint;
8 X  e0 P' A1 n) t* Q}5 H% I, f- V: l9 q3 ?6 {

8 K& i3 N0 t7 H+ cInt32 input_sample(void)
6 P; u0 q6 o) C7 C/ C{  % L* O& G! h$ L' O8 ?5 h
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
' j' ~2 C& @0 b$ n' [; R5 o& p  return (AIC31_data.uint);6 x- w) e  |7 F0 W; ~
}
: h  \# g  y6 z. D* D# f. x% z  H  a" s7 G1 e, v; h8 h
分享到:  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, 2025-12-1 10:57 , Processed in 0.037873 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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