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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
9 q* ~7 a8 \7 P5 V9 I& _main文件:, M' E; o/ }: N: C1 D6 r. `) L' n
interrupt void interrupt4(void)  $ S7 g6 m, u4 U# {& j
{4 K. [: ^) e" Y
  Uint32 sample;4 p2 g* q+ c* _2 `. l8 M
8 a" r4 e# A0 P" `4 J: j4 _% k& `
  sample = input_sample(); // read L + R samples from ADC
" L1 @" v6 K& k7 G0 u) T  M9 |  output_sample(sample);   // write L + R samples to DAC " H+ X. Q/ ~4 K1 T7 P* t
  return;
9 d2 a0 t: S1 [& e- r- m}
! e1 e, k( h; u" p4 f6 ?- P0 L( x2 M+ s1 O8 A
int main( void )
- z8 m- k- o* ]{
: Q% T: B8 S1 ?$ a+ C, B
8 E' W4 G2 O" B" ^1 T5 p; g+ O    /* Initialize BSL */
: y9 O% B( ^" w% A    EVMC6747_init( );
( q8 B( B/ Y& t2 _8 w        /* Call evmc6747_intr function */
. k, L( e. f9 k3 S1 @    aic3106_init( );+ {3 N/ j/ K; o
        while(1);% w% Y& V2 y6 |. |
}
$ R" K" t6 u0 [9 p* i$ C3 j" I( }2 B1 i* H, P
7 H: Z. ]9 o* s
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
5 ?/ z! R4 ~% D0 Q0 w/ M/* Initialize MCASP1 */9 X* K" ^! p2 T  E. c, l8 x
    mcasp = &MCASP_MODULE_1;
4 F. e. H+ g9 Q/ k7 S1 n    mcasp->regs->GBLCTL  = 0;       // Reset
% Y: f$ V$ v. U( X4 O    mcasp->regs->RGBLCTL = 0;       // Reset RX/ q. {9 [( P9 t/ R& y
    mcasp->regs->XGBLCTL = 0;       // Reset TX, I; ^" d+ \1 A" B8 a2 g
    mcasp->regs->PWRDEMU = 1;       // Free-running
2 l7 v9 Z. ?& v   // configure McASP0 receive registers4 ^' z. y9 T1 G, _6 j; ~
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
/ J- V# A' ?1 [2 g    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
: h$ y' ~( G% p    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
! k8 b/ v, ?5 S/ s5 R    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
8 v& p7 z0 {; v+ H    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)7 t' w! B& \) L0 E
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
- {; Z* o( p  l9 c* [& t    mcasp->regs->RINTCTL    = 0x00000000; // Not used
& ?, m: b" U4 A1 K6 ~, m9 O    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* Y; ~: S/ C: H9 t" Y

6 c! e$ A$ t( x8 k) b& W4 F    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used  u. d! I' H4 I- _4 [$ z' R
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. Z) C9 n  P! ^9 P
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word: f& `# S5 T0 b' d: X( y+ V
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
' Z7 y  a7 y0 [* b) x    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK! P8 c' k/ K6 S7 h, q, p1 _
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1  U& i! ?( k) V0 m/ ~) s0 f
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
+ h8 a0 s& e6 c    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, n: V. |' {! ^* G; N
1 ]* y' \$ e9 T* d* t+ E    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
; O' {, k  ]- Y' o( C  F6 e    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
! g7 T/ H5 w9 L4 F5 V6 P    mcasp->regs->PFUNC      = 0;          // All MCASPs% u7 i& U! D) ]! u# F
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX14 f1 ]) ?; W; ]& E/ a
& p- I, j" z' m1 b
    mcasp->regs->DITCTL     = 0x00000000; // Not used3 z  {; J9 e9 X" i; L  f# P
    mcasp->regs->DLBCTL     = 0x00000000; // Not used6 a* b: _/ n$ ]- j
    mcasp->regs->AMUTE      = 0x00000000; // Not used
# `7 _, g" O4 v) B& t0 O
+ i" w( K; x  C" x# f- [4 Z, u$ m/* Starting sections of the McASP*/7 [4 ?4 l, y; I/ m0 k' \5 E8 t
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
3 Z3 w7 V# D' R  j: ?6 k    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
- m: N& i8 O+ e6 s    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
1 I% E5 f% }% U8 j9 g    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
- a6 k" I# E8 K. Y4 {! \7 o2 n3 f+ M* Q* f3 {% I
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; + X2 x! d4 Z  ~
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );" K; C  T; m2 d
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
+ B7 ^4 w8 y1 N    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
2 g* |/ T9 H6 t$ n: G0 b
; i1 d4 J( a: D( k5 ]- e- D% y    mcasp->regs->XSTAT = 0x0000ffff;
* ~) z" D3 q1 v    mcasp->regs->RSTAT = 0x0000ffff; ' J( @5 ~5 ^, O$ B0 G

5 n4 H$ @# V% X% {% `$ d    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;' L: r# K& t1 q7 v' e
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );& D5 n. t% f! @: j' c* u  v
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; / f. I. Z/ U$ t. @
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );: u3 v  y; J( ]0 g
7 K- h& X2 G8 o, k; X2 p: a
    /* Write a 0, so that no underrun occurs after releasing the state machine */
3 }4 Z3 n+ H. H( |: K1 A2 K' p    mcasp->regs->XBUF5 = 0;
+ x% q; A/ }5 t6 g    mcasp->regs->RBUF0 = 0;' C3 d2 `; T$ _- `

  d, g9 F% {& x) M3 K    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 d; o- f7 G1 X: _4 W    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
2 z3 w* N2 X' w* h5 W/ `9 Y    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
. v0 P2 |8 i) Y3 i    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );- v. d$ B( L/ l- W
2 d1 Y5 V- b. r- d0 K; E3 G
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
6 l8 G9 J: Z* e5 ?" S' i2 h. N9 a    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );9 c% x' C- }5 G/ o  ~  e$ `
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
" M5 E- D1 d( f& n; V5 l    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# y- Z4 X+ Q# {+ \4 E- q
% Z! _( X9 d6 S- X1 I$ i* p    CSR = 0x0000;# a: q' P6 z' S. P6 N) B6 T
    INTC_INTMUX1 = 0x3d;5 i' ^% U9 Q  n* R4 L: k
    ISTP = (unsigned int)vectors;
1 \( ?8 [$ ~9 @. ^/ d* D" ]    ICR = 0xFFF0;  
' x1 N, N% I- R, j4 r' w& i    IER |= 0x12;  
6 E9 o" t8 Y- f6 H6 y    CSR |= 0x01;  
( j' v3 X- B5 s5 m9 Q, K9 r
# p! _' j7 e* j, L& L
% A5 ?+ T; H# `; k  @) |9 T# E* i' b3 ?$ q/ D, a
还有就是两个输入输出函数:; C: {# d2 T, O2 a1 Y2 ?' S1 ?) S
void output_sample(Int32 out_data)
, I2 n  u1 I  U4 B" p) y{
) z; u+ n2 u0 H1 M' e2 E' E' L  AIC31_data.uint = out_data;  
- T' ^0 F( s' i( ^  MCASP1_XBUF5_32BIT = AIC31_data.uint;: r% ^$ [: K  d9 e
}* t  y9 x0 @; w* w0 T
. k' P* T8 k; [
Int32 input_sample(void)
# p' J$ R( ^- G4 a' R: n1 Y{  
; G% ]! M; u6 n8 I  AIC31_data.uint = MCASP1_RBUF0_32BIT;
: ~5 H/ T. ~" l% M, R/ z+ |. H4 y: g/ A  return (AIC31_data.uint);, R1 Y! C+ }/ i( A
}8 f9 A+ }0 x& S: J
+ d& Y8 H) I9 Q4 o
分享到:  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-9 07:38 , Processed in 0.041609 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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