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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
' l* ]- e( b6 C6 C" [; l3 cmain文件:' P4 }) O9 \) f" I. H
interrupt void interrupt4(void)  
5 X  N8 c7 K+ a. U: f/ \{% y9 }1 }9 @' I1 _+ p
  Uint32 sample;* w) [! g  @% r- c1 N7 Z# \
9 N8 k+ l( v/ d/ ?3 c& D
  sample = input_sample(); // read L + R samples from ADC
/ M% C$ G! {4 G/ k0 p# \  output_sample(sample);   // write L + R samples to DAC . K4 }3 Z: l- U, x6 u
  return;
) S( o0 h% B/ L1 ]4 O% L6 Q0 A}
$ R3 u! g% p1 V. K8 o. X3 ^1 ^5 a8 N# s; o2 K% {8 K/ ~, k8 @
int main( void )+ U" w9 Z2 V- g; |, t3 P
{
/ Y* `: c1 J+ V3 Z) R; W1 s
( ]# ]7 j0 q1 C7 F    /* Initialize BSL */9 w8 b8 k2 i7 q1 r) L2 }
    EVMC6747_init( );
& i% h/ U0 A/ @/ l. e        /* Call evmc6747_intr function */
1 r2 c  G: X0 ?$ \; k" s! ?    aic3106_init( );
4 N6 \* |4 F2 ~! A/ w! v, U        while(1);; _4 t, L7 M2 b" b1 G+ S6 V
}
) S8 z! V5 [- o' V0 L% {, x
9 L* v: C5 _1 j% o7 a1 A! M6 X9 ]& N
, B: E4 D4 `! v" X8 ]1 u4 [0 Aaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题/ z# e4 ^6 Y3 |
/* Initialize MCASP1 */: o1 ~* ^. q5 [5 G+ G' U7 e
    mcasp = &MCASP_MODULE_1;
" S. C; ~: A& c8 a    mcasp->regs->GBLCTL  = 0;       // Reset8 v! h1 q! o6 G: D
    mcasp->regs->RGBLCTL = 0;       // Reset RX1 ?! w7 E; z' \8 S" i" U9 ^3 `
    mcasp->regs->XGBLCTL = 0;       // Reset TX
9 Q3 M9 a7 B6 @9 n    mcasp->regs->PWRDEMU = 1;       // Free-running
% }) `. k% I, f. q! R   // configure McASP0 receive registers4 _# Q/ P3 x! c5 j# ^
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used! Z# e# j! ^4 }
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 h  F0 J( t0 x1 F9 L    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
1 d3 q8 [2 r$ W0 q1 j    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)* F6 J, a8 v" b6 v
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
2 p2 r3 s6 b( I3 z8 o- a    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1/ x% i! S) h( X
    mcasp->regs->RINTCTL    = 0x00000000; // Not used% Y0 C. K2 ^3 `. G
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 X' y1 `7 m$ o; L' w8 _
7 u( R/ T2 v' X# y
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used- s2 m9 q% \% n2 j4 M. m
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 Q- n4 p- q! m# L+ x6 _$ c" _    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word0 v8 x' A+ ]% E- h' E; H# y
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
, N- K! Y4 A$ a* d8 V4 U6 j    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
* W) L" z! h: ]9 h* }1 C9 j& R! {    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
/ b# Q. W6 d7 L$ p    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit3 d3 p3 W% V5 l: ]+ O
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 j, H8 U. {8 `8 f! f3 C" |9 @
5 |2 z! x+ i/ k    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN0 P) R8 _& J4 h* G% f
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
9 D9 _, m/ t6 \, F4 s    mcasp->regs->PFUNC      = 0;          // All MCASPs
6 d) Q/ Q$ o0 b) e3 ~  e    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
0 B7 f  ^8 H& W+ D# p" @
5 U7 [8 Y) Z8 y0 ]/ [    mcasp->regs->DITCTL     = 0x00000000; // Not used
6 k) N% d6 @' N- T    mcasp->regs->DLBCTL     = 0x00000000; // Not used& N6 }6 x+ |  t) o
    mcasp->regs->AMUTE      = 0x00000000; // Not used4 m3 I6 [; D7 ?( _  o3 ]

6 i" a. A2 x& U7 L; i& r9 n/* Starting sections of the McASP*/0 Z! C5 Q3 e8 a/ {$ C& r4 X) \" x  [
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; # w8 c8 b. Z9 q, _) V( D: C" E
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
5 {" e4 |/ q0 u) D    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; * C1 P3 P( E* S5 S) H+ `9 z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
$ d, F# G! `1 E* N9 i! O9 p' B: k
  o8 e! B, o  b4 s3 c- h' H( W' k/ G    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; # d( D3 }4 [% I" e  L& Y. o
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
& k, t' k. V- K3 n$ b/ X0 y# m    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
! A# R  K" Y% B3 `    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
7 w: R+ |( \& b5 Y! A
* N9 H* c+ N7 D$ f: o- w/ o1 [    mcasp->regs->XSTAT = 0x0000ffff;
2 ~; i3 r- g2 u    mcasp->regs->RSTAT = 0x0000ffff;
$ H0 U4 M# L) K, j1 s  X! d
+ E4 w; A) [$ l" D) }: x" |    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
4 e3 s) o, a) e# j5 ?& t    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
, X+ F; O/ O* C9 n! X3 ~    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
& C- b4 G, o' N* ]    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );" q" X2 G  M8 k7 y5 d/ ]$ y! h

0 O& @( k$ P) u" Q. o, k    /* Write a 0, so that no underrun occurs after releasing the state machine */$ `( p7 M) ]/ U# B9 {
    mcasp->regs->XBUF5 = 0;0 p; f; s5 C9 `+ u- I" G4 r
    mcasp->regs->RBUF0 = 0;
0 A  ?7 W: L! x8 t4 y1 X* q/ M$ b( A3 [$ P3 O: ]
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; & v2 A0 C! u9 V! O
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
5 c8 |1 [3 m% i    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 2 ^2 p% c9 P: K& W6 ~
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
: I6 W. q& R; t" d2 L; I# q
" g. b' X* h. Q& Z) y: n    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
8 w: l3 }8 y3 R! l' x8 }  x0 L) J    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );5 k, c% a: P4 ~3 X
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
' a- ]; J  w* e: v3 n" C  D    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );3 V3 L; {/ {2 w( P" d9 N. _

5 N! W5 x+ ^6 j$ X- X    CSR = 0x0000;* N' r" M1 m8 J9 I- L
    INTC_INTMUX1 = 0x3d;) Q0 E! y0 s9 z* w
    ISTP = (unsigned int)vectors;5 d2 ~( C: D7 f5 n' E+ E+ I
    ICR = 0xFFF0;  9 u0 |. l. _) m) J0 ], u* H$ i
    IER |= 0x12;  
* |0 G# P8 E. e: F; y    CSR |= 0x01;  
" S: _; @& f$ Y* l2 O9 r4 [# s. t" D( f$ E  V7 B) [/ J2 J6 ?
6 J, x( I' Y9 ^. d

* F2 e/ S6 M8 M+ }, t* ~( T还有就是两个输入输出函数:
( g! B' I/ R2 Mvoid output_sample(Int32 out_data); W( q: U% u8 J
{( o7 X! }6 I2 g5 I" w
  AIC31_data.uint = out_data;  5 Y1 J! G* F( Z! e
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
# Q& Y+ B6 _2 g$ s4 x}& a6 b: L) O. |
8 g& g2 S+ i! t% s4 E2 s" Z
Int32 input_sample(void)
. ]4 M! W0 `2 |* e/ C- }{  
; X; ~* W8 m: |  AIC31_data.uint = MCASP1_RBUF0_32BIT;3 d9 y1 Y, g6 D5 L- Q1 `
  return (AIC31_data.uint);
6 l8 t0 L. Y# S. _. |}' n3 H  W% |1 n0 q" y; `3 V

8 g1 z. S# i- H; f9 {
分享到:  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-10 14:41 , Processed in 0.041864 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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