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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
6 t/ J$ Z4 t) P+ P0 Y) Z# gmain文件:
5 _  ?' l7 U  I. F" hinterrupt void interrupt4(void)  
& z* {7 k3 g% o1 G{
7 r# \5 u* G: e+ W- z! \5 C  Uint32 sample;
% Q/ q/ U  t- t  b
: r2 n7 h1 w: p* v% p$ D# ~  sample = input_sample(); // read L + R samples from ADC
* q7 r0 L3 ~: E7 z4 |2 Q  output_sample(sample);   // write L + R samples to DAC
. C8 m1 h- k9 W- F+ u  return;# i' P0 x0 L- }. O" C. `! i! b0 e
}" [1 f2 t7 }; L) f+ m
' N/ j% j5 S% i0 G$ n) T
int main( void )
0 l% m5 O5 [2 _6 n" F{
& |1 Z5 ^1 {' d4 k  X2 z
2 q( X* ^9 L, K+ o' u- k    /* Initialize BSL */6 i, Z9 ~8 p" F# H" z
    EVMC6747_init( );2 B$ A; [5 |7 c, Q
        /* Call evmc6747_intr function */6 a* c9 Z( F  i! l8 k
    aic3106_init( );# X( ^" M/ K, K) e) T
        while(1);3 s' a% o+ g7 t/ q. i% Y
}, ?8 [1 {+ t1 j4 _% e

( o+ D# M6 N' t, p3 V5 l0 `" x; R6 Z! C# `. W3 K( U
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
2 b) s) e3 c4 i9 Q3 h9 @/* Initialize MCASP1 */
" u  Q6 }! _# q  m# m. U3 A    mcasp = &MCASP_MODULE_1;% C: j, Q6 d3 L* e. {. I, |# E/ e
    mcasp->regs->GBLCTL  = 0;       // Reset+ Q% b5 V; }4 `. a
    mcasp->regs->RGBLCTL = 0;       // Reset RX: g' m1 v5 Z( u9 j; ?( r/ g- ?5 H1 M
    mcasp->regs->XGBLCTL = 0;       // Reset TX* J9 R8 m3 ~  F7 e
    mcasp->regs->PWRDEMU = 1;       // Free-running
, L9 B' j& P2 U' _3 L4 h   // configure McASP0 receive registers& i& S2 Q0 Q% `0 s
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
1 t) _9 q) K" t* |. [6 G    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
/ V, d# W1 C+ d( X8 _    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word9 V9 {; w9 s' [/ v, q
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
! j: K6 B% L# s! p, Z% A) U    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)8 M2 E- b. }) X0 v# c
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
  _: s1 }3 e2 o3 {    mcasp->regs->RINTCTL    = 0x00000000; // Not used) j% ?- h0 j8 l" F1 c! |' m
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! t2 F3 W: m# h% `! y
' d" J  ?1 [2 H) @
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used% g9 P( [0 J2 [) s
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& T9 `5 j3 ~; c4 c
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
- p) y- F2 R9 e) _9 N    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-160 X0 O% K0 }" N1 `
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
; @( ]$ \/ ^" m- P8 ]2 k    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1; ?" ], t6 |" _3 s5 Z
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
1 `- P2 t* X5 N6 Z$ e) }, \    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- A6 F! l0 P/ {$ Y* s
; g& g# `' ^* I, v  n: s" }
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN; r- k: o+ ]8 I2 V; H
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
7 o5 q9 s5 B1 K) W( |7 x  m    mcasp->regs->PFUNC      = 0;          // All MCASPs
3 ~7 M0 P; o7 j$ M+ o, Z% Y5 _& }0 H3 R    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
) w" ]! l7 S0 e9 ], Y  \
& T  c, i1 ^2 X    mcasp->regs->DITCTL     = 0x00000000; // Not used5 q% D; O1 `1 Q% `0 u
    mcasp->regs->DLBCTL     = 0x00000000; // Not used! E0 \. V4 |9 [7 r
    mcasp->regs->AMUTE      = 0x00000000; // Not used
+ E3 f% A0 w. f4 x8 k: N: N; d& O  B
/* Starting sections of the McASP*/0 o3 Y( Z4 ^& S; R6 b
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
3 l' u- f: |- m$ |9 a4 B' S    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  - Q, m. K7 I5 E! y0 f
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; / G/ O: O8 M' V2 H: O
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );, N3 a0 B4 w- f& _: K. z
* B8 j+ r1 `* c5 m
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ) a) E/ R1 g* |/ O6 `; z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );$ N! c# q" v( Z8 o9 q# _
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 2 L/ D; j6 E, D0 b1 }
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
( F& v% \7 _8 ]- |# O8 I6 e, _, E& A5 Z+ z
    mcasp->regs->XSTAT = 0x0000ffff;
4 [0 B" |0 E4 S* S/ c& ]0 o6 O8 M    mcasp->regs->RSTAT = 0x0000ffff; & k" \8 e) a4 m+ a& W9 O
* r! L! P9 p4 |4 W4 k7 p- F. @
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;0 {/ V7 a9 A$ h/ \+ w8 F" q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
, V" T% V! v9 ^2 C, X    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
7 U5 y9 g* H( [4 }+ D" O' g/ @8 O( x    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
$ @) H+ L9 c; U
/ _% k" j* x3 R, k/ t( P0 E    /* Write a 0, so that no underrun occurs after releasing the state machine */
# S8 p5 a0 N% i% h5 a# d! J$ L    mcasp->regs->XBUF5 = 0;& X: @* S0 S% K, s* A+ @
    mcasp->regs->RBUF0 = 0;
5 n1 e- }( T- w- n2 Q# y7 Z3 i& @/ p% L
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
6 `3 J0 S$ }1 |( f) [2 t! N8 F) B    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );% A9 |9 T/ H7 y* P+ u- x
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
1 k& p' f+ ~& c2 S7 a$ ]5 y0 k    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
% o9 L) J/ c& z+ G- c! s
  ]/ O: X1 u! y0 P2 R1 F# j    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
6 \' H* v2 R5 d/ B! r    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
: Z* D0 c" S0 Y: _1 N* v) N    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 3 |4 \5 N$ n% B& `4 G
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
% t4 @# V4 S8 \/ I% g9 R! s, K5 i# v
    CSR = 0x0000;
5 W0 e  T0 J& ~* Y    INTC_INTMUX1 = 0x3d;
2 V2 S% v* }: q* u& i    ISTP = (unsigned int)vectors;
' a" F& R3 B- a, p; V    ICR = 0xFFF0;  
% w; M9 `" g& j    IER |= 0x12;  
8 ~0 C- F1 F; S6 B5 \2 o  q    CSR |= 0x01;  ; C$ Q1 `0 f1 L9 e

/ s3 T0 k; i. I- m( M8 L
- }7 l$ H: p  d$ e, H8 M/ f) C0 q( y! w7 X, H
还有就是两个输入输出函数:
0 w7 q; o7 v) H$ X2 [void output_sample(Int32 out_data)# {6 t  l/ @* g# T! T
{
- W+ I7 k* n& R, k5 C0 L) o  AIC31_data.uint = out_data;  
! p/ U: |5 N( y+ f! f, E  MCASP1_XBUF5_32BIT = AIC31_data.uint;
& @( u2 C3 l/ o/ k}
9 y9 P6 r% Y: p. c, t
2 K# v' e  X; ?% F" ~3 q) }Int32 input_sample(void)
6 _( I! @/ q: P( _4 @- ^( `{  $ Q' Q% C  R4 W2 I' G5 g  T: G4 L
  AIC31_data.uint = MCASP1_RBUF0_32BIT;, L8 d. v0 Y) |$ M* {
  return (AIC31_data.uint);
  m8 S+ v9 P7 o}
) J; t# i0 R; w$ n% @4 W6 y& Y2 q5 x$ l- [% I- Y
分享到:  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-31 08:21 , Processed in 0.040266 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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