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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
1 ^! k4 z$ y, ^) N- ?. Y$ b3 Omain文件:
! o( |5 Q5 ]0 f8 O5 ]1 Q' Cinterrupt void interrupt4(void)  : ~( `# o6 \0 H; I' N
{
0 s5 ^3 X2 D3 J3 ~' N: _3 l  Uint32 sample;
+ T7 o/ Z3 j  {$ o' A  m2 G) [  M& [; v( L; g' c! v$ j. W; d
  sample = input_sample(); // read L + R samples from ADC
2 \! ]8 \7 Q& [0 k! B: `  output_sample(sample);   // write L + R samples to DAC
8 ]) u2 h, ]2 M4 @  return;
6 N& t0 g" }' i5 y* g: z3 P. E}
  h' C8 x7 H* e0 @9 [$ q- F
1 `& J' b: V4 G" |. e; F5 hint main( void )3 u6 }- k5 N- Z' W8 q# x% G
{
  M+ ~. t- R# h1 @5 Z7 J0 f
; \* S! J- t1 C& G9 I    /* Initialize BSL */
4 L8 b8 E5 z7 ~! U4 N    EVMC6747_init( );3 R  i$ n3 q: e+ y
        /* Call evmc6747_intr function */
% B* t+ \& Y, t+ G9 F8 \4 M    aic3106_init( );- m% p. ^- [) i1 y: B0 d  g
        while(1);
9 i  ^( F4 q0 j4 j8 u  j2 }}
0 B) Y+ U. E( ?9 w9 o7 o0 l
9 L/ ?3 y, r$ w+ u! d, f. b8 R
2 R- E& X. P$ eaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
( D6 `& b5 F% _  e/ S; \/* Initialize MCASP1 */; u. Q$ t0 K8 q) ~; S
    mcasp = &MCASP_MODULE_1;
/ X- W6 e; x5 f2 F* n# t' W, B    mcasp->regs->GBLCTL  = 0;       // Reset
, v2 j& K  _( ~0 L" w    mcasp->regs->RGBLCTL = 0;       // Reset RX
0 [/ h7 R- {! @' {0 `    mcasp->regs->XGBLCTL = 0;       // Reset TX2 f: G; ~- X# T2 d; q' a4 W0 Y# F
    mcasp->regs->PWRDEMU = 1;       // Free-running3 ?8 b6 ]  b8 R1 r, N7 ~5 n5 v
   // configure McASP0 receive registers
3 {  a' N/ x& q5 m    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used* S0 v* p9 g: J" {5 N* S/ \
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus; ^+ I( l! _0 J9 J/ y6 ]
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
+ y' G7 K" o- I. L    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)2 s3 S2 Z+ a0 P9 Q; N
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
! Q& o4 j8 u! }3 _8 h7 L$ [3 K    mcasp->regs->RTDM       = 0x00000003; // Slots 0,18 r, ^( _4 c1 j6 [8 `2 F
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
* j  U0 X% w: X! u* P0 F; v- u    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
  D: R$ O- f) B2 K5 I7 i8 |3 _/ d8 l+ ^( r; `9 E
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
0 e/ L; t/ G) S5 r* K    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* `; h8 p- J7 i  ]6 B: S3 a5 l7 \
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
" ?: a; W/ n1 n9 M3 e/ |- Z    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16* R' Z) x+ a/ V- i4 U4 G, B
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
$ n0 a0 F3 E; Q3 y1 ?) V, g    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
8 }' h: S2 `# s* v    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
) R- W1 j/ e! j1 l" W/ O! L    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
7 ~4 {+ u8 R, Y4 C' Q# Z% \+ c
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
$ N0 `6 s% T" }0 N    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
/ Z8 o3 d5 i7 s! D- q  I8 H2 K' B- g    mcasp->regs->PFUNC      = 0;          // All MCASPs% f$ U. F5 ?% m* G/ m& ~
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
9 O( v/ f" Z+ b7 s- u6 [; r* u0 C3 v4 ]
    mcasp->regs->DITCTL     = 0x00000000; // Not used  z( `8 i* w8 m* M* I7 K. M
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
2 D5 V% K+ t1 @2 S4 ^    mcasp->regs->AMUTE      = 0x00000000; // Not used, a5 N. K0 m. P3 r/ o2 E

  _5 X2 J) ~- Z7 B* m) M/* Starting sections of the McASP*/& X9 _8 z( a2 s- h$ ^) V, p
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
) \! u( k/ _0 b2 S5 W) E    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
$ ]- i) w* e" L, g    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
3 |0 w* N8 w8 q4 z7 }    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
% x% z7 u2 L. X" f7 [  A  Y' e) P' p: s% w9 l" ^; r1 k+ u' o
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; . [8 I! Z& _8 H- H( v8 E3 p. t1 a4 y1 u
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );3 Q" W0 t7 ^# u/ s$ C
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ( I/ x% m# z  m- e; b, U: i. w3 s  F: `/ r
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );9 [0 |$ w$ i- V" ?
0 I2 V3 Q' u& T
    mcasp->regs->XSTAT = 0x0000ffff;
6 v. Q& g5 T. p' \3 e    mcasp->regs->RSTAT = 0x0000ffff;
# n" d6 ?( t7 ?. |5 P/ _
7 M4 c8 m% |0 G/ S    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
" @/ s! p, E+ c8 o    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
, G: |4 o# g* f+ X) h  E+ E. L    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 0 k$ X+ L( u! V* |4 O( _$ Q7 ^& L0 c
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
( _4 C) g9 m2 o4 i8 n
. J  t( V4 |* X& s  w. N3 f$ R    /* Write a 0, so that no underrun occurs after releasing the state machine */" H6 l- }6 ^" v' H
    mcasp->regs->XBUF5 = 0;5 f! u+ A  _" D4 J7 c7 R- D: B/ s7 D: `
    mcasp->regs->RBUF0 = 0;+ ]! a# u$ }" u

% ~3 D5 l* G4 _: T' d) B    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
4 E  ~0 M" a; m" z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
# N( b. Q- X( v. E    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; / S0 O8 A, i# v& k8 V) m- _* d
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );) e& D* m* ?! ]" S# u
) a/ i1 U: T' J) b9 l
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
* J7 l- |, O9 b- k' [! [5 i  w    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
+ Y! i" B3 Q. n: S    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; * B& {2 |0 M% u, T
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );) F: V; m. b: @+ a* l+ \$ f
9 r5 ?, G3 t4 e3 l: I
    CSR = 0x0000;6 c) [3 d9 _4 Z* P' A7 _4 @
    INTC_INTMUX1 = 0x3d;$ K/ ~$ E8 i9 t" \4 t5 r; K
    ISTP = (unsigned int)vectors;
7 @: s7 _& t1 |# \0 U7 i! Z+ ?5 n    ICR = 0xFFF0;  ; C/ m+ U* Q) w4 L
    IER |= 0x12;  
' p" X# e0 @3 h' S+ g2 O4 w    CSR |= 0x01;  + X. \+ |) M% |: T% b9 Q! A

, H/ l6 [. ]/ P! H* P8 y5 F8 Q' d5 W. j5 J

/ I& ~8 ^, R1 o1 e) R& @3 G还有就是两个输入输出函数:1 k/ y4 Q6 c7 w4 a6 N7 x
void output_sample(Int32 out_data)8 U4 [# K( E  Y. C* B. u
{
$ S- k+ ?- |8 c8 O$ w3 B5 B  AIC31_data.uint = out_data;  
6 k( {  N' u& C- R( b: _$ M  MCASP1_XBUF5_32BIT = AIC31_data.uint;1 |8 M+ m" ?% C" p+ O
}. |) v# y/ w$ A

, T* t! d, ]) l1 W2 Q! O9 L9 ]Int32 input_sample(void)
' t2 B, k8 a& [9 N) ]# H% d{  2 P7 L# v% {) L% Z  q( @
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
9 f2 K# z! v! ~' d, t  return (AIC31_data.uint);
8 D" w  Y7 F, T5 K3 P6 b# m}, a# s9 X) C( @7 E/ @: m

0 c3 j) I" g7 S5 i9 A$ p- h/ 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-3-25 02:13 , Processed in 0.051383 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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