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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
8 a8 v4 Z& ?$ W& p" |main文件:
: F0 d3 |% f3 u# B2 ]interrupt void interrupt4(void)  1 Z' q4 F' i8 ?
{2 b: t0 k/ [5 s9 H' W
  Uint32 sample;  H  }6 `* [9 m- O! W% c
* }+ G$ K# ?7 d
  sample = input_sample(); // read L + R samples from ADC7 n/ W6 n% b9 m! H1 W# T
  output_sample(sample);   // write L + R samples to DAC ' n* D1 {* J5 H3 s5 h& C5 e8 ]2 w* o
  return;; l  Q9 }9 s% ?4 L) G6 V' |
}; h) W; {7 ]3 v5 D+ n

$ C. x6 K2 d7 K! yint main( void )+ @) U5 a8 P. i3 R! [( y0 X3 d
{. L& J! \9 B: @3 x( a" _

' Q9 ]( ]! q/ N5 e# G' H: r* _+ s    /* Initialize BSL */
; ]/ Y7 n9 q3 f- ^( A, x3 E    EVMC6747_init( );
& z8 K2 |$ I" l        /* Call evmc6747_intr function */
9 f* C0 E) y! B& g    aic3106_init( );3 i  N( t+ F( j
        while(1);
) f- ~( i6 m/ R9 Q) Z$ h7 L+ I}
4 q5 J$ I3 ]! J% t9 Y8 X( N2 n7 X
9 v1 l* b6 J( j: @* h5 M8 U' [
5 ~2 t( W9 p5 }" eaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题9 w. t% E7 {0 @% b
/* Initialize MCASP1 */
. c% }' M& m) I' ^$ n3 Y    mcasp = &MCASP_MODULE_1;7 p$ c) S' C9 D. |, t# k6 Y) z+ ]
    mcasp->regs->GBLCTL  = 0;       // Reset; x/ B+ C+ ?! s( ?/ L- x. T: }
    mcasp->regs->RGBLCTL = 0;       // Reset RX) Q2 _" s0 X) E7 m+ Z
    mcasp->regs->XGBLCTL = 0;       // Reset TX
% A2 h0 s) j1 p9 _9 w% d+ V  @    mcasp->regs->PWRDEMU = 1;       // Free-running
4 R! g" @/ F2 [: \, w# \2 A   // configure McASP0 receive registers- T# q; k& P# O+ M* ]# V. m& n
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
: I$ F9 h$ Z* G$ }9 T) \    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, Z$ r" t/ ?" m, w: u' R
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
4 q2 ^0 Z' R: ~* Y. o6 f% z/ y9 J    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)/ w% i7 l3 W' c! M8 p9 i5 d/ a
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)9 k* e) L8 g( W, ^. j1 p8 ~
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1% A& S( T% h/ C& W: K. O) t( }) ]
    mcasp->regs->RINTCTL    = 0x00000000; // Not used  h! [: ?. M+ P" X: d" S
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* x( K' P7 r$ k0 U' z7 X0 }; C/ X7 `0 v) x/ }& M
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
8 r( N( g3 T3 e9 Q! u- [    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 t! j8 }8 u( K; H6 ]2 h
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
' g+ }! r+ J5 a! V7 K    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
: h) }+ s2 W0 D4 x' Z, ~  S    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK% k; c/ N0 m/ T$ I
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,16 U& X9 y5 [! Y6 p, p
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit' k6 k% `4 g& O) C
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
7 j& K$ x) s0 K2 c- ^) B, a6 i0 z/ n# F9 Q5 h
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN6 O# p  ~  F$ d8 p  B
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
: T3 y8 m* f  y$ D5 M& i5 L; F    mcasp->regs->PFUNC      = 0;          // All MCASPs
' U' P* g( @3 f2 D9 W5 A    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
' Z' X9 D3 ]) I0 A8 c8 |) K( s6 F/ `4 l: k! Y* a2 _/ y8 A
    mcasp->regs->DITCTL     = 0x00000000; // Not used
: h! S9 u& i/ r. G. R9 s+ i    mcasp->regs->DLBCTL     = 0x00000000; // Not used
& {% d; v4 ~2 S  f    mcasp->regs->AMUTE      = 0x00000000; // Not used
9 x3 Q4 B* t6 b. y7 k( x6 N; ?2 _% H! I
/* Starting sections of the McASP*/  v* R% d) X5 d( t
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
' j1 @5 o( G! G' o' ?    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  # k9 K, h6 s$ j8 m- a9 @( e" _# k! y
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
9 a+ }, v1 n& _8 P4 H    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
" q$ o1 ]- f$ x3 y/ w/ o
* s# R. o3 b5 _6 e8 k5 h" P    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
, l8 B* V% N; v0 `0 f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
7 Y& G- L4 ~! {* V7 ?1 i) V    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
0 Z: e8 I# T; a    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );! L" I6 C+ S7 L! ?' A
: j( x2 [1 E  Q) Q
    mcasp->regs->XSTAT = 0x0000ffff; # C; U2 M9 u- f. o
    mcasp->regs->RSTAT = 0x0000ffff; - f2 a7 }: B% N
  s+ ?6 P5 z2 p0 L
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;3 u3 ^7 N1 C3 o6 R
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );$ \% F; k/ W: q2 P* Z
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 2 d4 [* A: `- X% j( j0 T
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );0 V, L& P3 {/ W$ L! G4 _
7 O+ F% W+ G0 K/ J, x- B5 O" \
    /* Write a 0, so that no underrun occurs after releasing the state machine */- e6 ]9 g+ b2 _* j% B6 [3 _2 Q
    mcasp->regs->XBUF5 = 0;
- s4 s8 Z* Z4 Q+ O9 P# F8 Y; `: v    mcasp->regs->RBUF0 = 0;: G. R; q/ K! q; o+ j

+ X, @/ w7 E4 U' H/ g    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ( ?8 S$ P/ g  g5 {# }0 j1 |
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );( E8 {1 U# Z: }) R, f
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
) f6 A# Q& F. ?, C    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
' V( {- K# {" y" J1 \- u6 Z
- e9 a8 i2 e* w9 ~. e    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; , W: h6 t. }' K) [) n" C2 k
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
' U# y2 u- ~4 T# x    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; $ B; n3 v' J2 ]
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
' o: k2 V/ X$ r7 E- w6 z4 Q
' [: ~; q) e4 [+ T. U    CSR = 0x0000;) X. V3 U7 u  c& ]8 q4 S; I
    INTC_INTMUX1 = 0x3d;, `- t% E8 ~, L8 }, p0 M0 j; x
    ISTP = (unsigned int)vectors;" P6 x# B% w* _4 p
    ICR = 0xFFF0;  
% d4 ]0 j! F! B    IER |= 0x12;  
$ u. Z  P4 w% ]1 M( X    CSR |= 0x01;    S  T  L9 W. l9 l; v/ N7 t+ l" A
" h" \, `5 @; K" ~- l$ u8 d
. D- X: [1 `! i3 T; _" Q/ ~% L3 ~
2 [: X; q0 y* @/ J/ f% e& a
还有就是两个输入输出函数:5 x( H' V* A; U! z9 E5 a; V" n' y
void output_sample(Int32 out_data)
( o) T( U, M, C% r{! o( [2 d& W* S0 v: ?9 S5 U
  AIC31_data.uint = out_data;  5 e! v  M/ ], Q4 `1 N! `' `- u7 Z4 S
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
3 V+ h4 z" q  |}2 h, c8 @% A, v, z

; A) y5 D5 t2 U$ V! yInt32 input_sample(void)8 e4 V6 M( m# {! l% E; H9 j
{  
1 S& r, X# r+ ]& a  AIC31_data.uint = MCASP1_RBUF0_32BIT;
- N+ \/ F3 C. h) I  return (AIC31_data.uint);
1 Z7 B8 o4 }1 Y. `  B# ?6 f% C}6 e- a1 H6 D' f

% S7 _0 o- I+ M5 I; u+ I  [
分享到:  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-1-1 05:10 , Processed in 0.037952 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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