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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
3 J( X- u8 B7 Y6 @5 }main文件:
* D& \- G) O9 Uinterrupt void interrupt4(void)  
: {7 t' |2 h# B" `{
3 Y. s- i/ M* @# g" n  Uint32 sample;& w- F; r% y/ n, i

$ N! O9 w: }! R. W& z  sample = input_sample(); // read L + R samples from ADC
) I( z, N  ?* Y7 R. A0 a  output_sample(sample);   // write L + R samples to DAC 7 @* U' F% n8 z
  return;  H; ?8 ^! T; ~- G6 g  V; `. d
}2 k! \$ z0 o" R. G: x9 }; H

) n, I# u! V1 @! d. J1 E. p1 t3 Z9 \int main( void )8 U, t9 q4 H2 d
{
% D- D, e2 h- V6 q/ m$ Z
! o# E0 S0 k2 V0 g) @$ I    /* Initialize BSL */
& L( K& g, V0 {$ y2 S1 Y    EVMC6747_init( );
7 `8 L4 l: B! k        /* Call evmc6747_intr function */0 l+ Q8 }' Y) J2 b
    aic3106_init( );5 a3 F" l& W2 h3 z
        while(1);
. z9 d( [& Q- t1 ]( [2 R}
* i# F' Y7 k3 f' D
6 r. o5 O% E! l9 z3 ~  x4 h7 A" |4 v: z
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
! S, p4 ~. h9 \, }/* Initialize MCASP1 */
3 y: n$ Y* }7 N  U1 I5 P" {( U" T    mcasp = &MCASP_MODULE_1;
- }' n7 c$ m& x$ k    mcasp->regs->GBLCTL  = 0;       // Reset( f8 a# n4 Z* L4 s# }; j6 Q: Y
    mcasp->regs->RGBLCTL = 0;       // Reset RX. K  M( H! o& \/ y/ U
    mcasp->regs->XGBLCTL = 0;       // Reset TX) c1 g! g. M, j1 M
    mcasp->regs->PWRDEMU = 1;       // Free-running# C' ^! f- {3 g" g
   // configure McASP0 receive registers. N9 a6 P0 @( b( G6 b
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
. A: q+ v) w; r' l* ^$ I* u% \    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ g- l7 L% R7 U. ^1 z* Y    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 _* S" i2 d' ?; P  t    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)  i: Y' Y$ \2 J. V( [4 B1 y3 B, B
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
7 X) S9 R/ m- ^: Z7 j" J    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1" h0 I' Z5 r4 C( ?- T" G4 F
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
- C% v: P5 I6 X; T0 G7 @7 j# T    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
9 z1 x: `& i: A+ H' h: _. C  J$ H! [: h0 |: ?( T9 X
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used- t: P  `+ {7 e- P) |) E; B( S  c" j4 o
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 `( k! v) ^- I4 U* J
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
- c/ h% }) `* C" [, Q1 t    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-166 ]% W* y3 V- @& I0 {1 F* y! t
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
0 x6 ?* ]/ j1 A1 k" z2 s    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
7 n0 J" `' a/ d( K* x# m4 L. v- @    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit! P: o- M+ m) w5 K' v' d& l7 g' O
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256, u* y% w( e) S# ?0 k  n

+ M$ F6 s/ ^/ u3 ~. z  Z! P: F    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN. h2 p. A) n3 e* O1 s
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT( H6 g* \: |# n. P, V# ]3 }0 w, T
    mcasp->regs->PFUNC      = 0;          // All MCASPs
8 I/ w# F! `2 K; X    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1. k- ~/ H+ H# {1 p0 U( b/ o, W5 R( t
5 h+ f& u& A7 X; ~# W
    mcasp->regs->DITCTL     = 0x00000000; // Not used
- M) \: P1 P1 l$ N7 P    mcasp->regs->DLBCTL     = 0x00000000; // Not used
) s6 e# `  ?5 k! k& q/ |    mcasp->regs->AMUTE      = 0x00000000; // Not used
. b) z+ ?! z( F* z
# A, E, Y0 T- M/ |; g/* Starting sections of the McASP*/: n4 y. L3 {* D+ f+ }- ?
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; - F' l5 W/ ~& l& ^8 }4 }
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  1 h; t* i+ W7 {3 j; B) t
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
% V- l8 q7 f  R3 p3 x; F    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
! P( f, D. V- `9 h9 r" k$ P
, }% U" |3 E% g6 T) m4 z; z  J    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 8 f) v; k4 b% @3 ]( a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );0 e2 G; _$ I0 s8 l) S) ^+ K" B) W
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
' i+ B7 Q. s, v1 F  @/ ]    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );5 W" e7 y& @3 j; Q
8 o5 ~) m; B% }+ f6 v
    mcasp->regs->XSTAT = 0x0000ffff; 9 h# n* W2 }9 u0 ?9 @
    mcasp->regs->RSTAT = 0x0000ffff; + C4 [1 J/ u! l" m4 f# g) e" J

3 o2 u$ q. Z; B1 R8 Y2 U% K' `1 Z. M    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;' h; m# P# L2 I2 X! N
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );' b* Q' S9 k# Y
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
( _5 c9 _  M( q( E( y7 Z: s    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
" k# g) f+ \) T. @; I+ O& |6 i! O( S" L/ T; ^
    /* Write a 0, so that no underrun occurs after releasing the state machine */- ]# ?, K" q* E, J" r' E8 f8 q
    mcasp->regs->XBUF5 = 0;
* q2 i1 _; b4 B/ ~4 o+ J" w/ q; w    mcasp->regs->RBUF0 = 0;
" M: Y. A9 C% n- s
* a  L( v+ ~5 V  _  E5 K( ?3 D/ ?+ M# o    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
9 O. n+ D. g' S+ h6 R* x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
, l! B2 g7 T# X" D- k7 d* Z1 N    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; . U6 }% N9 Q; m6 g! f' H
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );  n3 f9 Y3 M/ V3 o$ J3 Q! U$ H

+ Q2 o' x4 O0 A    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 9 e5 y/ `8 K! v( ^& I  @# O, d
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );' X" a9 Q; r# }& E
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; * L& n0 j2 c" Z. Z$ C1 z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );+ c3 U' v: l1 N8 _$ G) ]
) \' n6 G9 [1 C. {0 ~
    CSR = 0x0000;
0 R$ e. ?) O+ R2 y    INTC_INTMUX1 = 0x3d;% H0 b  O; f+ w$ j; _  B8 Y
    ISTP = (unsigned int)vectors;
( q) F& \" i  l4 @) G* ~' Q    ICR = 0xFFF0;  % H& K, h" ?! m
    IER |= 0x12;  " C. V' c- c$ E
    CSR |= 0x01;  4 R, Z" k* b  {8 [

* a! w' R% J& u( F8 y, E# g2 x
$ Q( H: y. w& I6 u5 T: R- @" E' ~4 o7 [4 Z
还有就是两个输入输出函数:
; i* Q: Z) p+ V  hvoid output_sample(Int32 out_data)6 E+ ^2 }3 E6 ]7 T
{
  ^- J4 O0 e4 `/ W8 M  AIC31_data.uint = out_data;  ; q" N- |# r0 ]+ w* m, \- s9 [7 c
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
1 M8 g4 G! x+ {3 }}
8 |! I8 V$ M* D" ]6 b" k% e, v( o* R1 y" k4 i
Int32 input_sample(void). W3 d( _5 v( N: }! Z1 \. H1 e
{  5 D8 ~7 r" x! d
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
" @7 c* O) N- u. Y/ h. \, b+ K" l7 k  return (AIC31_data.uint);
" k; B1 @# K* F+ w$ a}
  G. w# y; s. a8 o8 N$ L% W1 l, K0 [' ]7 m
分享到:  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-3 03:03 , Processed in 0.037439 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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