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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:  L* {! m$ S8 B6 F/ ?6 {
main文件:/ [) V& K) O1 M4 W' _1 R
interrupt void interrupt4(void)  " P5 z  m! n' W) I: e
{
6 ?+ \+ p& H+ J2 t' X7 s  Uint32 sample;/ Q  {7 k7 s0 Z# j
/ G' l4 s, J! N  B! _2 k' W; u
  sample = input_sample(); // read L + R samples from ADC/ [. F, J: v) n# z2 ]
  output_sample(sample);   // write L + R samples to DAC
! z* d5 _' r" m7 d: E  return;
8 G; L: v: t: B* J2 G' M* g/ m2 r}) H5 j; K) @) e- \# a

8 @7 l7 b) U9 J; u) H1 p# ~int main( void )
8 d, F6 i* w. q4 N5 I3 a{
- o5 L; d2 a5 J
  i2 y0 ~+ |4 ?% I! M; Y    /* Initialize BSL */% v8 D* e1 g1 _( R# {; b$ G  C1 X
    EVMC6747_init( );; E; z; e+ e0 |  m4 |0 E+ ^' a5 G" _
        /* Call evmc6747_intr function */
/ t3 n% {) P3 j    aic3106_init( );
4 m, ^6 `2 }' |% q6 L0 M        while(1);
) x- Y. _7 a! I4 y4 A}4 I7 f1 C/ l& v/ O" ^1 W0 a

& j! G# a3 v) I3 d0 u& K; w9 |3 }9 p' `+ c* C9 x! z$ A  q* G; Q
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
$ I, D9 n' e+ {/ ?+ V/* Initialize MCASP1 */
, d/ a& q0 J7 _# v1 s3 g    mcasp = &MCASP_MODULE_1;
! \+ B( P" ?! [5 l3 l4 s    mcasp->regs->GBLCTL  = 0;       // Reset- e3 V' h/ l# P. J, Q) N
    mcasp->regs->RGBLCTL = 0;       // Reset RX( o+ Y+ O5 M; r) d" t3 y
    mcasp->regs->XGBLCTL = 0;       // Reset TX' y3 p3 [& o) \( ~) A
    mcasp->regs->PWRDEMU = 1;       // Free-running
. d& N7 j( j. v- P& y1 m6 q   // configure McASP0 receive registers! ?9 {$ a& ^! r  S9 T7 Y9 J
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
4 W* b( o* y0 w    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ g- P, g4 C  h8 D4 T. i9 o3 G    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word0 P- v2 d1 b6 b7 t7 B4 r
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
7 y3 G+ [- D3 K- |9 X, v- Z) c    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)! C! t# v- U# i3 R
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1% G, R! x+ |! M3 ^2 R
    mcasp->regs->RINTCTL    = 0x00000000; // Not used' }7 Y6 L; [! e% V
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% Y5 W4 _9 J9 c% h2 a+ y

; J6 b: L" ~+ E2 w/ r; c* v8 Y    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used2 m9 A6 S4 b' k% [
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 L5 _7 m% {* Q- b# J) x( s/ p
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word  c2 u# b* J, h5 X
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
" h( i, ]' n# q2 Q    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
* e( n! B* Z; G; ?/ [9 Q    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
7 F- u% D0 y8 ^; v2 F: ]' y    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
5 q- ~( ]/ f5 |8 Y0 M$ s# |. u    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
# m- N+ a, o# U4 u0 f. U( }( b+ n9 G9 O6 G
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
* h% }' r* t! B' Z- i    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT6 O5 N$ }, ]: g- g  H
    mcasp->regs->PFUNC      = 0;          // All MCASPs
) A7 o9 b8 A; b5 @' c    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
+ a% f9 N5 }5 }9 t
7 ?, j9 W( r, D/ c( Q    mcasp->regs->DITCTL     = 0x00000000; // Not used
7 C' ?0 I7 }/ D3 B    mcasp->regs->DLBCTL     = 0x00000000; // Not used7 |3 E- A3 F* E. {2 J
    mcasp->regs->AMUTE      = 0x00000000; // Not used, }$ O  L2 G4 S4 I, w& v

# [6 \+ }0 u. }9 M0 ?# Y/* Starting sections of the McASP*/
1 x, g; m! _% C( Y7 K    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
9 _% o% W3 I6 ~    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
( A+ n5 W( z2 V. W. L    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
* _4 t, R% Y  C. l% E    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );+ b5 }) ^8 K' v7 D7 h) I

0 I. h; _+ v2 ~: n3 h7 L9 n* C    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ' N* M3 t8 G3 [: g* I- z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
; A- Q2 J) a( ]1 A    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
& L8 [* R7 k; d' {; J8 z* k    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
  _6 u% O, V1 o# K9 E/ K
& G# P1 \2 p& v    mcasp->regs->XSTAT = 0x0000ffff;
9 A. ]4 W- R/ @/ A7 V    mcasp->regs->RSTAT = 0x0000ffff;
0 ]% S5 y* |4 w  _, b$ A
$ d: @/ h/ H, y& q( H    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;. Q! w$ a/ A+ C/ A+ {5 G# T
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );$ z0 b3 P9 T% |# L" B; @$ \" O
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
; U) X' ?( P: l8 X1 ]    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
3 b' X6 G* f3 ^0 `  h" k
4 l/ H" W7 ^' X+ A7 k    /* Write a 0, so that no underrun occurs after releasing the state machine */: p) f/ ?  Q! @0 G& A( W, i/ S' N9 X% s
    mcasp->regs->XBUF5 = 0;6 F" T; j  o+ o; b8 Y9 }
    mcasp->regs->RBUF0 = 0;8 Y( K: @5 T% {& G

' f8 e3 d2 _* ?8 f" I    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 8 ^  Q' p, H1 _+ j4 t0 C( Q& b
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
7 S3 J4 }4 j/ o2 h    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
7 k" C6 H. S7 |" y: y4 `    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
- d$ B6 J9 H* U7 F( B  z
8 E) |! a1 {  n! y1 n# v" h7 @' q) p    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
) K) e, _$ h. x5 Y/ S4 J% F! H6 i    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
, G( w5 o  F: A8 ?4 S    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; & W* N: |+ G7 e& W4 e) F( r; J
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );3 d3 P' }+ J. |1 B8 Q

: y0 D9 {8 M. L% u9 x( ?    CSR = 0x0000;* d" D4 j+ M( P! M8 C
    INTC_INTMUX1 = 0x3d;
* i4 [1 N/ o& f2 C/ E& ~$ J: C    ISTP = (unsigned int)vectors;
& s8 \0 L& I& u, H  O    ICR = 0xFFF0;  : N* C5 c9 c2 v0 X, q
    IER |= 0x12;  + f! F- |8 k. d+ l+ B5 f4 y7 Y
    CSR |= 0x01;  
) T2 T9 _$ B' U" H/ f4 ^! h
- W, }9 G- m& T  n% y' f: O, K5 `* Q" W0 E- ?6 N

, O/ r* m$ x$ [还有就是两个输入输出函数:
2 [/ e+ ]# C, N+ Hvoid output_sample(Int32 out_data); W. Z' [# h* L) ~! O4 T- \
{
$ h/ p  J. z# l8 ?0 F% ?4 Z4 p  AIC31_data.uint = out_data;  % D( n, v! m8 L' w! V; g
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
! J4 ?+ e8 j+ \9 H) B& t: k) }2 u}
* J% n3 q: u& X2 E
3 a0 ]% {( C7 r) e8 z2 p! Z$ |Int32 input_sample(void)
9 U8 _: }% _& M. n{  - U& p$ V- U, K7 w1 z7 p
  AIC31_data.uint = MCASP1_RBUF0_32BIT;6 N0 o6 y* s6 w! z5 b
  return (AIC31_data.uint);
8 }+ ?/ Q; Z- m1 V: H, O% i- _! x}
& g& h4 [& n  _7 x; ~
" {, V: h2 d8 J* 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, 2025-12-14 15:33 , Processed in 0.039232 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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