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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:1 a6 n6 E/ [/ @: v$ _" d
main文件:
) L9 k- h7 ~+ v/ Pinterrupt void interrupt4(void)    T7 |$ E9 e# @9 U* W
{  a2 p3 L0 `, _, R9 N5 l8 J
  Uint32 sample;
# b" [5 ]2 x0 F7 Q4 E
& E" l0 P$ o4 _; L, I  y  sample = input_sample(); // read L + R samples from ADC9 W# B# g' y! c9 f: t
  output_sample(sample);   // write L + R samples to DAC # ?/ d3 m& U$ h/ [0 y
  return;- T1 M" k" N& p. z3 y
}
  B: l$ h* p! P. n. I+ s
5 y8 j$ R2 o: |int main( void )
  V! B, @8 \9 `5 g% v* B0 D{4 v- `: g3 Q# ~; D

+ k5 Y8 t! _2 r9 B9 S    /* Initialize BSL */
) o$ R3 _, Z' L, n    EVMC6747_init( );$ |4 ]% D1 @3 \+ Q4 g5 v: _& E
        /* Call evmc6747_intr function */
# z7 y. T: s" N    aic3106_init( );
. w1 W7 i* i8 B- s  H( C        while(1);
+ A2 u. t! Y1 \' o# R/ e* L}; z: a% z, o2 [# J$ z
8 Z4 e0 g( ]: [/ i  E6 d# @
5 T! ?+ k: h& k/ ^% s
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
- B( [( Y) H8 N, @6 D( V/* Initialize MCASP1 */
: o' K( \3 y9 T    mcasp = &MCASP_MODULE_1;+ Y) d8 x+ B1 d5 e3 B) C
    mcasp->regs->GBLCTL  = 0;       // Reset" i4 _1 {8 u0 i; O4 B# e; X' S
    mcasp->regs->RGBLCTL = 0;       // Reset RX! c9 h7 l1 w/ @' k$ a3 e2 p8 T, t
    mcasp->regs->XGBLCTL = 0;       // Reset TX
% d. a3 `# Q7 S' s4 ]8 l. C$ w    mcasp->regs->PWRDEMU = 1;       // Free-running
9 y7 k. i, i8 U$ C   // configure McASP0 receive registers: L6 i/ s) G. c  x0 j! U2 S
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
2 M( N, t+ I7 m0 h9 U' i    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 J" }- A. F. u+ W    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
1 z. m1 z! Z7 O    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
/ u8 q( i8 H$ n0 B2 q% Y- T' s    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)6 O) [2 v7 s! Y3 m
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,18 R! {5 J( M" x5 b! N* p9 \
    mcasp->regs->RINTCTL    = 0x00000000; // Not used: T5 W9 `5 C- B
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 v1 ]/ K0 N# _2 o2 W2 e- G

7 [  |0 B6 L/ d, I* n1 J# H! K    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used/ N- e& ]8 `2 f( Q. T
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus# N# g$ |0 B1 D: P
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word4 V' i% k' o3 [+ |
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-164 [! R) Q# w! {0 r' @
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK. [$ e+ G) ^) U, E  H# o
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
6 @. M, O2 q, Z& ]& c  K    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
" \+ \3 L3 v6 s  k8 `' i    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
) M7 B  K$ v6 b% A5 k
- O$ x, b0 n( i7 `    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN+ ]3 s/ _8 h, X+ x  A" d
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
# t$ g) d- ?- A( ?    mcasp->regs->PFUNC      = 0;          // All MCASPs
8 t: i) L- @7 ]5 l- f( J    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX11 O! }  q& n6 W' D) e

8 t, y( k9 g5 t7 q$ j. @    mcasp->regs->DITCTL     = 0x00000000; // Not used# U% P, k- A" y8 Z
    mcasp->regs->DLBCTL     = 0x00000000; // Not used( `- T  E3 b7 }* N: v- I7 C' t
    mcasp->regs->AMUTE      = 0x00000000; // Not used
1 ?! q1 [, L3 i1 m( x6 k6 W* Z/ X; o9 C& ?2 e- A
/* Starting sections of the McASP*/
4 H8 w; ^$ R5 v& d, K( Q( c    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 4 i8 [5 k% u3 a: y7 D# {6 ~
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  . O3 w. Z" I( V
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; . e$ ^7 ^2 \8 B- N; H' ]
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );) n3 W( b0 c5 h3 j: r

* m  ~7 G  k8 k: h+ G4 t    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; : N  m1 Y( Q& c1 ?6 W
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );) C% n/ C. J, ^  X
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
7 H" U) q4 v" _% q8 q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
/ {- W* h7 p. A' L! r# N' |" H8 ~/ b4 v9 ~. _. H
    mcasp->regs->XSTAT = 0x0000ffff; , \( H& e. d- a  B
    mcasp->regs->RSTAT = 0x0000ffff;
0 ?! R& b7 ?; j. W" x; N4 Y4 B8 u4 K  s+ Q" C+ z! \: j; e' j* L
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
: h5 ]3 Z. o/ \* B* V    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );) W1 A% q2 C7 n3 ^3 `% x
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ; c' E. j9 F; o3 X2 J! F
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );3 W& ^) s' w0 H" q+ L
# S& q% z9 W8 M! s" l8 Q4 v% E  O
    /* Write a 0, so that no underrun occurs after releasing the state machine */8 C5 L7 [; D- S$ H; K9 R) D0 `/ W
    mcasp->regs->XBUF5 = 0;& q. j/ r3 Q  U. N  W6 N' C
    mcasp->regs->RBUF0 = 0;( s! P) m' ^  ]4 d' B
6 R% M1 l  c. l7 J. L4 f
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ) e5 J# K2 n* C# k& g; Z: E
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );3 D- k- T+ p5 e9 o2 t0 h9 T% K
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 1 \& h! Q: T- s' e) w0 ^6 r
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );0 B; K$ h' ~9 J7 M- K

, x/ |4 h; U& \7 \) y/ }+ ]) x7 {( x' v    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
8 V- \1 E6 L" t  y    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );' I7 e. A) `+ w& G' f) \
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; & e; X% a( T" R& t  e6 _5 D% F
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
; x+ h/ w8 J  V' }! \) V$ A  B2 w$ g+ l
    CSR = 0x0000;
3 O" c' }# P2 C+ W5 i# l* g    INTC_INTMUX1 = 0x3d;0 J' _  [+ ?, V5 u, ]: J! X
    ISTP = (unsigned int)vectors;
+ u) q! O. m! \* a5 ?    ICR = 0xFFF0;  ; b* X' Y) I/ i1 [) L
    IER |= 0x12;  
( Y# q: q% [" B/ V8 Y9 b    CSR |= 0x01;  
, E) a0 i+ ]" D
- k. ?) ^* ]4 T/ f) L. e! r; B- [$ r
- W" J! y5 _8 Y5 ?% c" a. ~$ c/ \- [2 p1 M- W
还有就是两个输入输出函数:! {# M6 t4 r2 X( K% L" W" H
void output_sample(Int32 out_data)
* r  e2 M& T1 Z* U- p5 [{
2 m. @; z* y7 `- r% ?- [  AIC31_data.uint = out_data;  ) }: b3 B# b; [, K0 n& w
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
1 ~  u% W: j8 h; F4 K3 C}
# v9 a$ x1 i9 v! Z. a: `( V6 }% d
# K, T+ A+ P$ W" t( B" X5 a! G0 pInt32 input_sample(void)
- f1 H* @. B! C4 ]: z/ @* T{  8 T7 R% k7 F7 C! ^  d& F( m$ i+ N( ?
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
! J& q2 H6 s2 k+ p5 |$ R& P9 R* |  return (AIC31_data.uint);
: v: b9 Z% w/ f9 P# Y}6 ^/ Z- A  [& v. d- r5 s& g
) G- t$ ]4 L! [- y) a. `
分享到:  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-13 06:02 , Processed in 0.038096 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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