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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
* S5 L& [/ d/ k0 A( h/ q4 emain文件:4 @; `6 H7 ?, Z
interrupt void interrupt4(void)  
$ Q  F0 L9 M, |7 b{
' L1 w5 O( c, y9 l; w: x  Uint32 sample;
( x3 T6 `0 B* S+ G2 H) Z2 q* `! |/ T) A$ D% R/ F) [9 v% y
  sample = input_sample(); // read L + R samples from ADC# K& R0 R, m/ L3 n  v9 D- q7 t
  output_sample(sample);   // write L + R samples to DAC
! A5 B" u# d6 P9 r! f5 q( a& z  return;  ^. w4 R* a5 o0 U! `2 ^/ ]
}
; o! c% L4 e# t1 @) A: m( b2 o/ w, E7 c
int main( void )
% I; I5 h+ ^4 r4 |{$ @$ t+ p" z3 S  A
7 T+ G9 s1 }2 o% O, A% M& \
    /* Initialize BSL */; U4 w0 W  ?- A
    EVMC6747_init( );
+ R. C& |/ x& y) Y: U0 T/ N7 L        /* Call evmc6747_intr function */! Y. \1 ?. v) ?5 \
    aic3106_init( );
- `8 d; X& y( v. G. H        while(1);
$ Z0 [' l1 A2 o! L/ r1 |8 K6 l}6 X9 P/ ]! d/ o8 p: q4 ?
% M7 x2 t0 R- m: v' B8 W

0 S6 `7 z$ N3 N- p" d" b) vaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
, J0 T& V* B* |/ n3 w/* Initialize MCASP1 */- m+ ~; _9 P# _$ G/ C4 H
    mcasp = &MCASP_MODULE_1;( S% J; i# u5 [0 j! x
    mcasp->regs->GBLCTL  = 0;       // Reset
; d8 s" ^2 _$ L% V    mcasp->regs->RGBLCTL = 0;       // Reset RX) l/ o& G+ [6 X6 o8 ]! m9 l' g
    mcasp->regs->XGBLCTL = 0;       // Reset TX
" w3 i' ~1 h# Z% J+ Y    mcasp->regs->PWRDEMU = 1;       // Free-running
) s4 C1 B5 F' L2 S   // configure McASP0 receive registers6 r7 _' V* a$ s& A2 ~! {8 `1 B
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
9 ]0 k% u" L8 {    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) ?1 B! C: ^- o4 a7 y2 I
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word. @/ ?6 y. q0 [2 P: {
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
5 e  b+ y( \/ L, @! n0 w    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
) J7 _: s0 s( Y  b( D, \    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
. A5 R! z3 s* r3 {  _    mcasp->regs->RINTCTL    = 0x00000000; // Not used5 Y3 I8 U) R& Z' ^- h* e- {
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" j: N9 X" ?! Y0 G" J5 T9 J  E5 `* D, h8 ^
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
  h& l9 z4 S( F" ]7 F5 j* D    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 y8 Z4 z; B7 B+ j$ p
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word, N% y  e3 v6 l
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
' |& T/ k* r  \; R" z    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
4 R$ x7 I. z$ |! u    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1! |$ {2 f, b7 q# S3 ]9 k
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit- A/ Z% h( P) d6 |! E
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 {! f8 Z3 ~" z1 }8 Z7 r- X
# w% d. r0 z6 C2 |' u. K
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
! l. P# u* L8 C$ X    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT: ^  ]5 {, G+ U" d9 z0 U, k
    mcasp->regs->PFUNC      = 0;          // All MCASPs; e# v: P8 U+ }/ {
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
$ m9 k8 ~# m, S3 q2 r$ G+ ?5 d5 q$ p/ l2 K5 u
    mcasp->regs->DITCTL     = 0x00000000; // Not used
* [# L9 H/ p' |. x    mcasp->regs->DLBCTL     = 0x00000000; // Not used# V9 O2 h4 a( r3 M& _5 R7 K
    mcasp->regs->AMUTE      = 0x00000000; // Not used
0 @5 I8 T- Y9 V
* e' B4 j. q! \+ ]( S, U2 w/ C( o/* Starting sections of the McASP*/" E' _) Y3 V% K' D. X# i! A
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; & D' h& p* l4 s, _
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
5 R+ M- W& Z% B    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;   A* p) X) y8 q2 d: R1 Q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );9 v" X. k2 r' X9 }& C6 M* U

+ x( w' E9 n  i" Q6 F    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
7 H5 l& H* U/ [1 I2 F    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
8 J% n/ q! W4 Q3 \4 v5 B    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ( e5 T$ l& n6 p2 ?
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );3 x/ R$ s  l' M; m9 R. v
  m7 J, j& v$ h& D+ C" V% \
    mcasp->regs->XSTAT = 0x0000ffff; 7 c/ F4 t. L; y3 m0 L: M9 z! T6 I
    mcasp->regs->RSTAT = 0x0000ffff; ! o  Q/ }& J3 m# a
0 N% A2 q% `$ D% \
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;% A3 |0 W, k3 N
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
: ?7 S4 y) d$ K! s/ d0 j    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
! p* r# A& a5 `; l# H) {    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
0 [3 ]) [7 E2 A6 u* |9 A$ G  ~. U+ W, Q; p9 A' a9 D
    /* Write a 0, so that no underrun occurs after releasing the state machine */, A1 d+ q) n6 R0 M/ ^% @
    mcasp->regs->XBUF5 = 0;
3 @$ z1 U0 v$ o" N. L4 B    mcasp->regs->RBUF0 = 0;) ^; c, f1 ]5 k1 o5 P

: o& t, t+ U4 r    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; % C: a3 X  h- g2 J% }( t& X
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
6 |, h3 q) }' \7 C    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; , X9 H" C6 x2 q0 {7 U& L
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );* S; q# ^( U" R' h3 V1 ?2 Y

# @$ Z+ Q8 d$ z. c9 z1 w' _    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ' X# ~6 f' s; v3 \6 c
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );9 D+ I! e+ L& }8 U; z- m7 W
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; : d& [& y( m  ^  ]/ l; E; i
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
1 C& }3 l- x  R1 M$ [0 V* e7 d2 M) ]1 Q4 i, _
    CSR = 0x0000;
% A& d* D7 r& G3 c, u8 Q0 \    INTC_INTMUX1 = 0x3d;, L) r8 x0 g' A
    ISTP = (unsigned int)vectors;
% y+ n, Y1 x% t    ICR = 0xFFF0;  
4 _9 ]5 {1 U& X, }7 l    IER |= 0x12;  
! q: p8 m7 q/ a    CSR |= 0x01;  
& O: @# s2 G1 v' u, w0 V& c
0 ]( B  L4 m* N  h2 i0 {3 z5 Z/ J
4 A' W+ {  k+ C. v6 r* z; k
& g! F5 R5 s/ a2 B! o还有就是两个输入输出函数:8 A( M2 c2 ^. ~' X) J
void output_sample(Int32 out_data)
  I4 D3 z( Z- s* C9 k% N{
/ J0 ?8 m3 R/ X2 ?, _  AIC31_data.uint = out_data;  
' v% R+ j: A& @' ?3 _8 R+ b5 z7 `  MCASP1_XBUF5_32BIT = AIC31_data.uint;
; s& \- |) x5 U" X/ j6 p}7 @. o7 n; |! |  D$ w

; f- f1 E% y; u" F4 VInt32 input_sample(void)
# p6 |+ E0 d5 |{  
- n( {! e' s/ w. q  AIC31_data.uint = MCASP1_RBUF0_32BIT;' ]8 R. W' u! [/ ]/ A; H2 O( n5 [
  return (AIC31_data.uint);* r! V% A( _* ]4 j1 N( f/ ^1 z6 i
}
, i* V6 k+ l6 A5 }( b$ A
& n" \% e; `+ g
分享到:  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-2-13 16:41 , Processed in 0.039617 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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