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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
! G1 J: v; q. w( }main文件:9 x: g, d% Z& o& Q1 v
interrupt void interrupt4(void)  # `6 |- y+ r8 I  e
{7 N1 H0 a  y& ^; H7 j
  Uint32 sample;7 P+ |2 m" T" x* W

2 ~0 S, B* i* ]4 I  sample = input_sample(); // read L + R samples from ADC$ z8 b0 Z& a4 h+ s% o) Z  w4 P% @- M: q
  output_sample(sample);   // write L + R samples to DAC
, q7 @9 p- k9 N0 V  return;
# V" L  o' s% U& E+ h: L$ n, q+ H}7 R' \! f  r5 h% g9 [; v7 d: w0 c
( e/ {3 h8 p4 X1 d
int main( void )& v* i' ~/ u. S$ Z; B+ @: `9 _8 Y
{5 I" W) |! i1 k$ m8 C0 r9 M

# b2 l& O1 G) w    /* Initialize BSL */2 @2 q1 ^+ n) }- x3 N
    EVMC6747_init( );. N9 q* r. R" p
        /* Call evmc6747_intr function */
; u; f) u4 {  Q$ u7 V    aic3106_init( );4 ^- s8 x; J5 ]& K5 L4 n
        while(1);
( |7 Z1 u2 i2 i- E3 _( ?}: w2 N5 T" ^* V$ r5 s. i

+ L. y/ p( F) o- K) v- ~6 l  p, K* ?: C. L7 j3 L
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
0 k0 k; i  m7 ~" J( m2 D/* Initialize MCASP1 */& ]- j1 d2 W# ?. @$ A* k" X4 D
    mcasp = &MCASP_MODULE_1;
" D+ ^5 P0 Z0 a/ A# f    mcasp->regs->GBLCTL  = 0;       // Reset+ o8 D$ x5 E4 Y* W
    mcasp->regs->RGBLCTL = 0;       // Reset RX
  r% o  I, d' W4 `) J- e! \    mcasp->regs->XGBLCTL = 0;       // Reset TX4 }/ b, g$ o: A
    mcasp->regs->PWRDEMU = 1;       // Free-running
+ n: @8 }6 f+ g8 A   // configure McASP0 receive registers- b6 ~3 J$ \$ z
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
0 B) |  ^; W, G: ~4 v    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 t7 N- p, Z/ _4 L" ?    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word. Z: ]& _8 V9 a3 W
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)* k& i5 i; B1 A: X4 Z5 [  [' s
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)9 N2 B# V$ a; }: t$ H1 c$ T
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
3 p& a( g- t( C& L6 i% K    mcasp->regs->RINTCTL    = 0x00000000; // Not used6 s7 q+ w* Z4 ^  t0 ?% y
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 r9 s3 j( }) X. {0 k5 @0 Y( k% C
+ Y- N$ w$ m3 s- q* Q( c    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
- m6 `* w! m4 e9 h* t    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus; j. ^; ]+ V. r% ?3 x3 k2 k
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
6 }( P' \3 W: M- o" x$ ?3 L    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
* |5 `! S) l; {7 ]: W    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
+ s2 @2 I# {  q: G( f    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1. w2 M, e4 E7 s# c6 p1 i
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit0 O, X. C7 G: c2 e1 Y
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 G: M1 X" {. r4 q  ?  N2 ^9 ~6 `
9 @- u6 |4 c3 I& l4 b    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
; j9 z) u. \8 p" j* W$ O    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
7 f) \# Y! `! X/ `    mcasp->regs->PFUNC      = 0;          // All MCASPs) `! I& w! L) W$ z
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1. Z' L2 T6 w7 w3 R* R$ _

  A& o8 }4 I9 z7 u3 o. T    mcasp->regs->DITCTL     = 0x00000000; // Not used
" f1 ]) \4 K' Z' C+ w5 U# J! G    mcasp->regs->DLBCTL     = 0x00000000; // Not used
2 J0 |" Q: R6 n) g    mcasp->regs->AMUTE      = 0x00000000; // Not used
6 `$ W! z9 E' K, V; [1 I# h) |
, W2 A4 _, U+ h; U  Z/* Starting sections of the McASP*/
+ `* _  G, G! ^4 f    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 6 _$ M0 m4 n' \! u
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  - `# R2 r0 Q) G
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ' k) e% s3 U8 r2 b
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );  s% ?+ Q: ?; K# G
2 L- {+ o* C, ~+ u% m; W  f# d
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; / J+ j0 h: m$ G+ ^
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
0 n5 |3 e) Q3 i2 c% w    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ! o' g1 P8 R2 X% @* I/ X4 {
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );7 M4 R1 [+ V; K+ c* Z( M' s
5 r# D9 L6 s" e) }; J' c8 J! A
    mcasp->regs->XSTAT = 0x0000ffff;
/ F: S7 }! F) v/ Z4 _" E- e    mcasp->regs->RSTAT = 0x0000ffff;
+ O& u; t. T$ N( C" {) d# B* P$ x: J1 F% _$ W) N
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
8 b  n; y6 S% x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );; R6 G% ]5 f& p1 W. h* }8 Q
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
% j0 l9 P6 ~0 O1 T3 _    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
7 Q% s5 e; \+ n9 ^* d4 w* N# B" a  A
    /* Write a 0, so that no underrun occurs after releasing the state machine */
9 }" U" h& g0 t( M% f    mcasp->regs->XBUF5 = 0;
( b" _2 L0 h, u4 I! d; T    mcasp->regs->RBUF0 = 0;/ o8 r6 f& f% T1 |9 |# q+ s  J

- O3 h& p9 ^) X0 F9 e    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ) }' N( P& b# e  R( V7 l$ v
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );/ x8 o# }' ?# a& p- w6 X1 ^
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; # \" j2 w" Q- I0 n
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
/ r4 y, g$ }1 Z  I. {6 M  q5 S: b
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
4 ^( s- ^8 f. ?3 v. X$ O! a/ I    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
. s6 o+ |; K0 |1 Q2 C. G. \    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ( T9 ]4 B  e4 c% A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );% w3 Y7 U% |6 }- m2 H9 u5 B

8 D3 z, F6 L& h/ V; }/ d4 M7 K    CSR = 0x0000;% l# v+ Y' v. U6 o" G( ]$ `) h+ @+ F
    INTC_INTMUX1 = 0x3d;8 m6 A. Z6 m: L) {+ u% O( [
    ISTP = (unsigned int)vectors;# o$ C- w7 h! `2 m4 f# {
    ICR = 0xFFF0;  ) g/ C( N2 q% Z; g  l0 o- g; v" {
    IER |= 0x12;  
! X! f! v+ `2 L+ B# J    CSR |= 0x01;  " G/ i8 k& U( L' N% V
1 ~8 r; _  q4 f6 j; c. R

% l6 X" }1 c* F7 P7 B, L# t/ Y7 f* j
还有就是两个输入输出函数:
& i5 A7 P* ^( Q8 v# y% Cvoid output_sample(Int32 out_data)
0 z% R9 ~9 i$ L$ `8 k( H6 H{: x3 S1 j; m4 I3 D% h% L
  AIC31_data.uint = out_data;  
3 p1 }2 V7 v0 L" H: h9 Q  MCASP1_XBUF5_32BIT = AIC31_data.uint;
0 x7 K7 D+ P+ |5 t7 X0 c}$ H+ P$ r) W' T- s

( Y# a. B. F- m! n: m$ LInt32 input_sample(void)
# m; O- i% O% y7 J. E' m" h{  ' m% E3 n& k+ x. w0 c" v, e
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
$ T* _7 E! {/ Z  return (AIC31_data.uint);  l8 Z5 w3 L* o0 {4 t
}7 c1 I& [$ ]8 E, I1 r
; f/ i5 o0 x3 f
分享到:  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-11-19 14:32 , Processed in 0.042732 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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