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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
+ f7 W/ C$ M4 Z5 G  Tmain文件:
- l) s: L4 E2 z2 n2 g2 yinterrupt void interrupt4(void)  
( @! x; m4 `! c) n! ?{
- ~5 g( a8 Q4 N2 h4 y/ |5 @% j  Uint32 sample;
/ _" l) z4 k# k! h8 I$ _' w" j' B; r& U* d3 d  p& F) P( O& j
  sample = input_sample(); // read L + R samples from ADC
; T6 I9 i$ \  u: G3 J- s) A8 ]  [  output_sample(sample);   // write L + R samples to DAC : s6 T5 i. {6 ^2 a' [
  return;6 S3 E. B- T- r' D* f
}8 m, @. h' p0 E+ w4 Q3 d* R

2 C, z/ F! {9 \, `5 mint main( void )
- Z& ~; J7 X! d$ F{
( C. C# {+ o( h( Q( G/ Q0 A: g! D: X1 {4 p9 F
    /* Initialize BSL */) N* A8 w# \) g6 `! ^
    EVMC6747_init( );' l$ G& \7 V6 O0 l+ K
        /* Call evmc6747_intr function */; P3 u8 I. _# }$ C. X2 u+ f0 J4 z
    aic3106_init( );; b2 L( W! U6 H
        while(1);% U8 ]4 L$ N: t) x5 Y
}) Y3 M8 {" j  ^$ G/ V3 j

& k4 P- ?8 G9 a$ }
: F4 g/ q# ]. [# a: c! ?aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题2 _7 E: s0 H& J# a
/* Initialize MCASP1 */4 w; u# k$ z  L- Q1 T2 Z& w: d
    mcasp = &MCASP_MODULE_1;: C: w" K3 N5 |* m- G$ c" l( |4 ]
    mcasp->regs->GBLCTL  = 0;       // Reset0 Q- z% \$ ], C- }5 ^* Y
    mcasp->regs->RGBLCTL = 0;       // Reset RX2 [7 l' F7 {+ g8 }/ u
    mcasp->regs->XGBLCTL = 0;       // Reset TX
. ^# h3 c5 e7 k/ z    mcasp->regs->PWRDEMU = 1;       // Free-running
6 N& s' ]. Y! S% N   // configure McASP0 receive registers
, P$ s- V/ W8 D: I4 D6 e* |; p7 h    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used( t4 X3 R. _9 @0 v" C4 P
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: R7 N. _( [( H; L4 P( J
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word8 u% u, ~. B& F* j1 P2 K) l
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side). V, m7 D3 u, b2 K/ ?; i$ o' r
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)% q4 J% {3 v, a3 `" [" f3 J
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
: R: l& J2 _  V# q1 n4 _) }7 O$ L    mcasp->regs->RINTCTL    = 0x00000000; // Not used1 I/ s3 A% `. e' w
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 t" T. A6 f" H* r
+ ?! Q. s' B) D9 U
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used# G4 q1 g0 N9 P: _. \! b) {
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 \) o8 U8 z4 m7 Y3 ]* S, J# y. M    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
. f. I! Q5 Y) [& K. z  f5 K    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16. G) J1 V% q5 G* ~
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK, G" m! {8 U* ?% r# D& t9 J( n  n- K6 P
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,19 s# T' a7 w% Q- n
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
, P3 J4 K9 H' E; i    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* o$ b( R+ `3 P  m2 [+ s# D. {3 o6 k( t2 O" h; T& Y5 [! I
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
( Q1 [) e! t) H" Y3 O    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
: m" U0 I0 D& i/ I% B& U    mcasp->regs->PFUNC      = 0;          // All MCASPs
; d7 s; ~- W0 w3 s3 }+ |' q    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX19 [6 R* z1 h# e, {* {2 E
  ~/ S% k- {3 p8 `4 B9 o4 o- a( a
    mcasp->regs->DITCTL     = 0x00000000; // Not used
& R& E9 ^  i; j+ X; G( y    mcasp->regs->DLBCTL     = 0x00000000; // Not used
# F$ T/ S$ r  z: _    mcasp->regs->AMUTE      = 0x00000000; // Not used
9 O1 {. B4 B, s7 j3 O' z; V8 p6 X$ A
* R9 o! T! S* |/* Starting sections of the McASP*/
/ I0 H( \* b" \0 [& f9 p& T( ^    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
0 R$ X$ @* L, d( e    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
9 Z* ^( _3 Y3 I+ p& i  O, Q    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 4 x* d: i5 l  q, J
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );# h. n! @. M  f% y8 h8 _. D! G+ Y

8 f" |/ e; Y& o$ b    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
  N! R7 {1 z  y. e7 I" Y/ e- \    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );6 G( V" F/ i! c/ n  H0 e
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
* l  g! |1 W( q) L- [$ u0 P$ U; d/ _    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
! Y5 H+ J" i+ B( `5 k. T7 m8 K/ h
- V; n$ I- x, K0 L; ~7 k    mcasp->regs->XSTAT = 0x0000ffff; $ k. V1 Y; S5 {% |6 v
    mcasp->regs->RSTAT = 0x0000ffff;
  r; x8 J, g8 w* |$ i6 @4 y
6 K* `  {, h( m; J" ]- j; V9 D    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
! L+ w- b4 z1 b0 ?    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );* h" w5 s& h# a
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; $ W4 x9 r0 w: }
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
7 W$ @: t# l, ?; u5 @. k7 M
6 x/ X; P6 d. C8 X1 {8 g4 v5 K    /* Write a 0, so that no underrun occurs after releasing the state machine */2 N4 R4 {" ]8 Y; r2 D" {2 J7 Y1 g; N
    mcasp->regs->XBUF5 = 0;
+ G. E+ V% O2 w% g. V+ {    mcasp->regs->RBUF0 = 0;& n9 F! q  a1 J" s1 N* t' p* [1 X

/ r( n- {- e( n- u; D2 x7 k    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; " [; ~3 _9 h* B3 t- g0 V- T
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );& z7 f2 [( H% B4 _  Q
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; % X5 E6 @. L. \) g  q; H
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
, p0 e6 G/ `8 }+ |  W. S8 f6 x  R1 ?5 J% ~7 v
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ) r7 I& P. p  H+ d
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
$ s" T' N/ Z2 R; T# ]9 Z) |, j: }. `    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
# c. ^* e7 \4 s0 y# Z# B4 M    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
0 o: J/ b% m, K3 w: w
  _* ~0 |: G' I/ ]) G3 Z    CSR = 0x0000;# N) e# X  W, R. }8 B( C
    INTC_INTMUX1 = 0x3d;4 h6 X) ^: w: d  r! b" P: _4 W
    ISTP = (unsigned int)vectors;4 W4 ]+ ~! Q% J  i( c" Y% w
    ICR = 0xFFF0;  * R2 d+ c1 X& b5 s" q
    IER |= 0x12;  
) y- H  J! [1 b    CSR |= 0x01;  
; i* O& S# |# M, S+ K' x
4 w* \/ z2 B: N1 f) x. H3 k  h9 [: B/ J; b& F1 M1 ]1 p4 L7 J

1 |# y/ U; E2 F, m还有就是两个输入输出函数:
* \3 m6 _) \* |- B. o5 fvoid output_sample(Int32 out_data)
) E1 W! u  C0 |0 H: |' a{! D' D- `; u, C+ A3 a  ?
  AIC31_data.uint = out_data;  & I$ d* o- o! A. x
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
% |( D* z' w8 L& A}, y4 h8 a1 |  X
5 Y$ M  P0 S; Y  s' |. P
Int32 input_sample(void)' c( g% E* w9 f8 ?. D5 S9 S/ c* m- B
{  
' F* u+ {7 u/ d' s+ H  AIC31_data.uint = MCASP1_RBUF0_32BIT;* I' z. V6 \! \* G
  return (AIC31_data.uint);
5 f' h0 _) }- ?2 S( V}
" m  X# m# ~: v# i4 T4 D8 ?$ _0 j' _, N$ x( k; v
分享到:  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-26 08:58 , Processed in 0.041542 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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