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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
& L7 H" j$ E5 e# u5 Lmain文件:9 z* o9 k. k; X  W5 |
interrupt void interrupt4(void)  # R* V6 [& R- z
{
! u/ w4 |8 L1 i) X/ Q  Uint32 sample;
/ h8 s/ g+ Q# B5 p, N  _
3 H; q7 k. O$ \2 H! @5 `  sample = input_sample(); // read L + R samples from ADC
6 \: j8 b, Q* m, j& v& ]! P9 B  I  output_sample(sample);   // write L + R samples to DAC
' B1 ^3 f0 B* _. C  return;2 k2 A, K* f* f
}/ }+ l0 C* f: W0 p, K

* w4 M/ J7 d& Iint main( void )
0 M2 ]/ `& `' s3 y{
8 B9 A+ N2 {+ d/ s4 F% b6 W6 O+ O: x  o
    /* Initialize BSL */
8 ~5 s% g) o' \5 j9 C: a# S    EVMC6747_init( );1 O9 F( M5 f# x- q; {
        /* Call evmc6747_intr function */7 o9 @* ?  c$ }, r& u/ H5 N
    aic3106_init( );/ R3 h  |8 D- m: e
        while(1);2 t7 a# g4 x8 ]
}2 b+ U* P5 i6 ?$ c6 D  v( s

0 G  }# ?, Q* e" I" c  M
8 \( {# ~& C1 w0 [* `3 |aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
0 b' v7 X* m1 G: Q9 Z/* Initialize MCASP1 */
: ]' }/ d0 i2 J    mcasp = &MCASP_MODULE_1;8 y2 E& ]/ ]6 {* X* O
    mcasp->regs->GBLCTL  = 0;       // Reset1 @( L1 C5 z2 G2 |  E& @7 u; J
    mcasp->regs->RGBLCTL = 0;       // Reset RX0 W. O' U& n$ U2 y( ?/ J: T
    mcasp->regs->XGBLCTL = 0;       // Reset TX% {9 a2 v! n/ {; H4 l  `) y
    mcasp->regs->PWRDEMU = 1;       // Free-running
$ F! y# a3 p  @0 ]+ U& I   // configure McASP0 receive registers
2 V! l, i# n$ H0 O& D- s  ^    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
" w/ r0 j& v- s# F! R( O    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 @- y$ n# v9 W9 v( h    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word3 R6 w( I& W) P# O
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)8 Q8 l7 m  X6 b" \% V: t% o6 r8 b8 R
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)* g& M" h% E8 E$ m# P' G
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1* B0 v$ D! a1 f
    mcasp->regs->RINTCTL    = 0x00000000; // Not used& t) h  j' U0 Q7 B! }; l0 A' q* l
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- ~+ ]/ y3 Z5 G5 n0 `6 P8 c
/ @% |- Q: K5 |0 O2 c" |5 p: ^% M. f
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
4 O0 j, o2 v& G4 c+ p    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, P* k' U! _+ G# A- m    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
+ Q. G( L! M1 b- h! a3 ~    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
3 U+ c; _; O8 \0 K, M) p    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK+ ?, s( w4 v5 x- H/ P
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
& u; ]! q+ M0 o$ m- o    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
4 L& W4 z9 X- z$ F    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% i' T1 p- `% {! f% C8 B% G7 w9 n, C* ]; ?
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
3 `8 [; ]! K& Q. Z& b- w    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
" \$ }5 a3 _" _+ K. r    mcasp->regs->PFUNC      = 0;          // All MCASPs) t  B" x0 u8 @; T/ }( `0 k
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
0 S$ \# V9 Q* g9 l! Z( V+ v/ |5 `. M; \2 M9 M
    mcasp->regs->DITCTL     = 0x00000000; // Not used2 \( [2 |7 U( a. p: `, f" O
    mcasp->regs->DLBCTL     = 0x00000000; // Not used* G8 }( o( d" L1 w6 r
    mcasp->regs->AMUTE      = 0x00000000; // Not used
+ v* s- y0 \0 |) t( W, k6 j% p
& A  k0 w  M- V8 O2 Z/* Starting sections of the McASP*/
: @' R% U7 b$ T$ y7 P, `7 {5 ?, ]    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 4 _$ Z5 S9 I7 }4 C
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  & e. f3 J% |$ g* @7 _
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
8 I( F9 E1 y% r% ~    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
, }  I: e& f1 K/ d% [/ K6 u9 y2 m3 s: c2 ]/ I
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
$ j+ ]7 u2 M( U7 T    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );% y; l6 l  Z. w* u1 r6 k9 H  @
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 3 s! x7 S* I+ t1 V$ j' f
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );/ Q: v  @  ~3 M1 j: Q9 G

4 g9 A* \$ C' @6 ?5 ]' d    mcasp->regs->XSTAT = 0x0000ffff; % W2 v* H6 J! K' z* c% t
    mcasp->regs->RSTAT = 0x0000ffff; / m: l! X6 k9 l; s! J

1 K% l# L7 u* f' K/ O: j    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;: w& N* R1 R/ e7 [4 {+ D5 p
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );+ k5 P' }2 q' E" B
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 6 h. r% ^. q( v9 ~
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );+ \1 }* d9 H& q2 I$ A7 i4 Q
, z; L0 w5 c+ s9 \1 j& _
    /* Write a 0, so that no underrun occurs after releasing the state machine */7 _* d# S! N& X, v
    mcasp->regs->XBUF5 = 0;. W8 h: _7 [$ m( J  L
    mcasp->regs->RBUF0 = 0;2 K0 b; ^' O3 F9 M3 Z6 t
8 w% w# z3 l: t7 K
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
/ j! K  ~9 V8 @2 I7 J    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );5 t) I1 \) }0 p, |" ?- s8 }
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; . q. [' j2 A% Q9 ]0 f, V6 a) \+ d
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
0 I3 l; y5 v7 }( i; h% u( c4 _% e6 m1 |
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; , O8 l$ E1 @5 i
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
, p5 v% ^7 j, o2 g    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 9 |9 A- z# V- X+ [) {
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
/ a; T: e' j  p6 ?7 O" d' L. T+ D7 j+ A" }5 N5 u% l4 P
    CSR = 0x0000;
" i8 r% }; g4 y2 S# u( K* W    INTC_INTMUX1 = 0x3d;
7 ]% T" O5 W+ b: N+ {) [) {6 n    ISTP = (unsigned int)vectors;
5 r5 O3 C/ G' J& w" C0 \1 {. R    ICR = 0xFFF0;  
9 e8 f: }) B5 z  j    IER |= 0x12;  
; ^/ _  x3 W$ c! C! A1 s    CSR |= 0x01;  $ L5 M8 t: {$ z% t: j

0 }! F; B& m/ R) R  o& J* z1 [8 G6 m7 g

) U9 k4 C  E3 ~. w6 |还有就是两个输入输出函数:2 B2 j: O, a$ q% h$ P5 L
void output_sample(Int32 out_data)
5 u: S  q+ [. d3 d+ J{
* W% U- j- _# \( o# x* _/ H  AIC31_data.uint = out_data;  2 X$ A- Z" J5 a
  MCASP1_XBUF5_32BIT = AIC31_data.uint;0 q, i7 e( B! `7 h; R" w
}! C  s  w) V* w1 B
4 o/ W7 Y! h( O3 {( t
Int32 input_sample(void), l3 y6 ^7 W# B$ x7 f2 ~% |+ H4 I4 n
{  
1 w2 v- O6 X3 U* q9 f- V6 H  AIC31_data.uint = MCASP1_RBUF0_32BIT;
) U6 V7 l4 l+ B5 x  return (AIC31_data.uint);
. d: R% g/ j$ V1 _}3 e- X" x5 A! j9 j+ X

/ \4 x3 t$ y7 m4 a" u' P
分享到:  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-3-4 12:03 , Processed in 0.049745 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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