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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
9 Y( {$ y% {4 S7 E$ U5 H' s! m! ^) @main文件:- f! O9 x6 E/ O, r
interrupt void interrupt4(void)  
! t3 |1 ]* M, d" ]{- j# C; l; R0 J: n' [3 C
  Uint32 sample;
" J$ e8 G: ]' c
, G+ x8 p) Z1 ^# m2 C3 L. L( P  sample = input_sample(); // read L + R samples from ADC, \% i! G+ n: B
  output_sample(sample);   // write L + R samples to DAC
: @0 n* f9 T; B: \1 E, x, L5 K) p  return;
' M3 O' ?; m4 y2 j! K}
5 E2 g7 L, [  a8 l# k5 T  r+ N2 H1 Y: S3 L4 C/ s3 k
int main( void )5 V9 p/ K4 x& y* x3 B5 }3 S9 f
{- l: `3 l0 Z5 a; o4 k
. s! L* U* a; o$ X
    /* Initialize BSL */) q9 e9 |0 j- y3 o, q9 t0 S
    EVMC6747_init( );
/ P( y( H- Q% a9 v3 W8 z        /* Call evmc6747_intr function */
1 Y5 _3 ~$ `5 e8 \# K& U    aic3106_init( );
% _- y9 \* m, e  f0 M; F        while(1);
, N+ d5 {) j7 c" y# S}8 Q$ J5 G9 n% U/ o) l1 H% Q5 H$ }+ e

# J! @; G& t3 O- i. L4 I) ?2 E" x
1 W7 B: i* n- K5 l* Faic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题) X# }3 _/ j8 \+ V0 _4 m; L3 m
/* Initialize MCASP1 */
7 L: n! M) y# t0 S  B- W5 o- A2 C    mcasp = &MCASP_MODULE_1;
0 d* ~' a9 o2 U: ]+ e6 C' D8 V' R  N    mcasp->regs->GBLCTL  = 0;       // Reset" j" T& z. z8 p0 w  i. ]- @- Q
    mcasp->regs->RGBLCTL = 0;       // Reset RX3 i( o. N2 i" J- M
    mcasp->regs->XGBLCTL = 0;       // Reset TX
  D+ u! u) J- `5 ^" ^/ c# S& T    mcasp->regs->PWRDEMU = 1;       // Free-running# Q/ H2 f* b4 M& J" ?
   // configure McASP0 receive registers, b4 l+ Y  o$ w  l+ e
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
6 _$ A+ W6 I, S! s    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 R% V* L. h9 M6 Y) w+ O+ s
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
$ y0 K' _* f+ P# `- l3 f& g5 Z- I! J    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
; I# q9 S- `4 q: R9 Y    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
+ H) z$ ^  }$ N- [. L" ~; V    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
# k3 w" v6 @0 T: n    mcasp->regs->RINTCTL    = 0x00000000; // Not used
0 V# \# ~  }4 r) E. k. k: V    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 [5 v* l3 c' C3 j' S; U
' ?9 O% A$ D6 ?) e' \; I4 V    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used" ^) q1 j/ O& ^( Q. k# _, Y( F6 y
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. Z2 ]+ t$ M: M6 h
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
, h# K  n1 O5 A    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
: z7 X! B, [+ ^+ E6 W    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK9 {# M1 [$ D# i6 O3 J$ |/ }. f
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1; h' z$ u- \+ ~* Y1 C$ L
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit% @9 c; s4 S* s) ?$ R
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 }2 F6 ]" E# `9 Q# D( e2 _1 X' ?- R; P+ @! m6 {/ |
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
- ~+ D4 V6 X/ V# b1 f) s/ i    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT8 p, n6 P: S3 `+ W5 |% j! N
    mcasp->regs->PFUNC      = 0;          // All MCASPs
$ _# ?+ I* ?9 [7 K5 A3 ?    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
- C7 Z6 a5 ~) L, O* b3 _7 p) p  F  T
    mcasp->regs->DITCTL     = 0x00000000; // Not used
! q2 P+ r, i) `0 M4 q# q    mcasp->regs->DLBCTL     = 0x00000000; // Not used
4 A' P' H* p" U5 e    mcasp->regs->AMUTE      = 0x00000000; // Not used3 Q% r# J! Y! L9 U3 G1 z; n

% q8 B7 Q. g4 A, U/ Z/* Starting sections of the McASP*/
4 P/ }. p5 N5 [; h( A$ {    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; - W3 C- ~* r' Z8 O* g
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  6 R: S9 P1 |1 G: P9 h
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; + v* ?3 C$ Z& J% g( t/ m  z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );: d0 Q" v% L8 U

& {$ B4 D% r5 o' D    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; : ]/ `3 U4 k. d6 _0 C6 w0 D
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
3 @+ }/ b% c( @+ Q& _    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 1 I* w( Y" b( x/ G* `* D* j/ L
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );% k; I8 `3 Z1 @* r

3 k# l2 o5 i6 V" p    mcasp->regs->XSTAT = 0x0000ffff; ' d; ?" c" F  N' @+ p0 }* f  R
    mcasp->regs->RSTAT = 0x0000ffff; & k' w6 J  Q( j( J. I& I: Z
, n) I  V3 ?1 T2 B' |- r9 y
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
0 U# I8 P+ d. F$ u/ e    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );. _8 O# Y2 [7 @, E+ s
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; & G4 ]+ n3 ?9 d, u% F
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
2 W. ]8 A7 |4 N8 w( S' C
" t$ {* n* a: c( o% o" t; |2 l3 W    /* Write a 0, so that no underrun occurs after releasing the state machine */
# D9 [3 Y5 M5 M9 ]" o+ D, L4 R    mcasp->regs->XBUF5 = 0;: q) a2 C+ I( Q$ D  L& @) \
    mcasp->regs->RBUF0 = 0;
0 a* ?- b: r2 g$ m* U; ~  l) x4 Y- L% v! g
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
& j3 f4 {, X3 Q4 ~+ f8 M/ i. {    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );9 h  r: _8 ^, m& q
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
& c) E2 C+ B8 l    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );! l) x& W' j& P" r
+ c* U3 z, g1 y9 A
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; + z2 d9 O+ y  [5 J1 r$ |2 G& Z$ m$ ]
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );, ~) R& g8 u# }
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
' N5 a. w& X# R9 q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
1 c* p& f/ G- J' s: B3 W- _+ M; w$ k- |: E' b0 C" T
    CSR = 0x0000;
% V5 K3 M. |) l+ e' v7 t" Y    INTC_INTMUX1 = 0x3d;6 f# a3 I4 w4 a0 M! W
    ISTP = (unsigned int)vectors;
  M( d! g4 f9 g- M8 I    ICR = 0xFFF0;  # P1 m7 y! j% q3 W
    IER |= 0x12;  
4 {' v  o- `2 [5 ?# g" g    CSR |= 0x01;  
0 ~2 @3 b+ k# T% A6 }+ l# M, l( h. t& u& y; s/ `

- S) P- p! b6 l4 c' s; B
8 M; i. M9 K+ r! [2 q还有就是两个输入输出函数:. n" k0 Q2 t  f. v
void output_sample(Int32 out_data)
$ N# n" E% s# C" Q' E  }7 W{
" Z( f: L+ P9 P$ R! _  AIC31_data.uint = out_data;  
' U. k3 j$ o) \9 t9 B  MCASP1_XBUF5_32BIT = AIC31_data.uint;
. W2 }* ]) S: z$ B}
: X! I, F: z+ t! q) C2 o8 N3 A$ b0 ^$ |$ N( u- H
Int32 input_sample(void)
( x% |+ g/ _& R0 h, ?: s3 d! @{  2 z6 _8 f8 c1 ?2 y; e6 e4 G$ `
  AIC31_data.uint = MCASP1_RBUF0_32BIT;7 j; W9 v& M/ {; n
  return (AIC31_data.uint);
- ~* l" H* F, m( p}
: ~5 _2 H# r, M0 W4 a$ V. ^4 v
. V% \. |9 E1 r$ |
分享到:  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-11-20 23:21 , Processed in 0.044502 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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