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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:+ Z1 i5 w4 b0 H, C5 r+ K# r) n/ X
main文件:* s' K5 j' p6 W6 H3 a; J
interrupt void interrupt4(void)  
3 w3 V; L4 i* y{
1 s/ l+ G" r6 N9 |, U  Uint32 sample;
, [) N5 g6 K/ t& D1 {! @% {* @& m  Y# L' _8 Z
  sample = input_sample(); // read L + R samples from ADC+ s# k. B1 ~, F+ |' A
  output_sample(sample);   // write L + R samples to DAC , ]4 t1 K5 v% C- Y
  return;
: ^" w# }+ Q4 S5 ?& h1 `9 V- i}. O2 Z) i' U/ X, {0 D
; V; P( A) ^. @$ O
int main( void ). {$ A- x3 ~/ Z3 U
{' g5 @+ [9 w( T
, E' H+ _6 J4 K3 J3 j- k
    /* Initialize BSL */: u/ f% \8 m* O' h+ N  x; A
    EVMC6747_init( );
* a- S$ I( s. [        /* Call evmc6747_intr function */
# b  X' J# [( M$ g    aic3106_init( );9 P( X7 I0 w3 R
        while(1);
) C7 ]& l. [( P3 j6 W}
0 S. B) D4 }2 i/ n7 E/ ?2 A. _2 n$ V$ _$ H& u$ n% v% \) R* E

" j7 s8 Q3 K9 N( {9 @aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
4 s& W4 p! J! n% i. k+ y  H+ J/* Initialize MCASP1 */5 p4 N- M) R# n& `
    mcasp = &MCASP_MODULE_1;
; @" g9 {& K& L) P; y' m0 L    mcasp->regs->GBLCTL  = 0;       // Reset* L0 ?) R3 @: ]6 W
    mcasp->regs->RGBLCTL = 0;       // Reset RX
7 ]1 w  ?3 R3 h9 S7 u" O    mcasp->regs->XGBLCTL = 0;       // Reset TX
8 G# ?4 r. Y0 b1 n- W8 f& T! h    mcasp->regs->PWRDEMU = 1;       // Free-running
" f& X5 \5 s, K* Q: K3 x7 [2 _   // configure McASP0 receive registers
) u. y* z/ a* X, X" y    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
: b7 n& b# R- b1 E& ?" x3 l! D9 D    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
* N4 D& j2 V1 z: H3 f3 Z7 _* D    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
1 }# [0 c7 s1 ]8 e    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
0 V. R  k5 A* O. C, A3 A+ N    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)! @) m8 w& l+ _' N5 T: d
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
& Q3 L' E( s6 K5 ?8 N/ E    mcasp->regs->RINTCTL    = 0x00000000; // Not used- n* S- Q8 ?1 {, D" q
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; D2 A& L0 r+ C/ c' Q  t/ A* V8 h& b

$ E8 p" L1 ]' K  `  a" r; v; U$ t    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
1 D, ?- `" ?2 ^8 |0 _% Q$ }& x    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 |5 y2 g- b8 N6 [+ Z/ ?5 ?- Q$ X    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
- b$ \+ `! }8 B5 C2 n( }- D. E    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-169 f+ r5 x3 B5 D8 ~. i3 G
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
, p, r8 u8 H+ d2 m* ~    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1, W3 r' K9 y4 K' P5 b1 l
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit( {, X- ]2 ~, A
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" `8 r. C/ g2 S' P! m/ q1 E
+ w* m, Q/ O! z
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
  a8 `) q; u3 _; B. g    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT+ v7 w& _! T) Q3 {6 j
    mcasp->regs->PFUNC      = 0;          // All MCASPs+ l6 u) s6 l$ h4 R2 [( q
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1, Y/ {6 E1 p8 k! `" M! z
9 I9 g3 ~! o+ S' k9 K3 a
    mcasp->regs->DITCTL     = 0x00000000; // Not used$ W# X/ B' o- q! j
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
, X; L1 N! o  d  v    mcasp->regs->AMUTE      = 0x00000000; // Not used0 N* v( v; ?% m

$ [& w- T9 C, i/* Starting sections of the McASP*/
9 M- K3 z! A8 ]9 F6 T8 I    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
7 b6 v! G) a4 b& k2 Z+ O: C    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );    _+ c1 H: V9 `
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
2 [: |& {( s- T3 x8 y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
" F( O* c6 ]2 Q! Y5 o
/ |( Y$ A9 h0 v" B3 Y, u+ Y    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
$ m8 l" a" Z% M& `: }: }    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );$ X% o9 R6 c5 D2 e1 d* ~# L
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; * a& e  N9 O; A6 t7 H
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );- g( W% y' r6 C1 i% D
( ~1 G, ?- _" I, \! Y* W4 t" K
    mcasp->regs->XSTAT = 0x0000ffff; 1 H5 ]( }5 S; {$ f3 |- f
    mcasp->regs->RSTAT = 0x0000ffff;
* o  G5 y* i$ ?+ ]& e' ^
$ a3 z- w: E5 x/ `    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;# C9 _8 |  L9 Q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
9 [2 C0 v0 h9 z3 N, e2 A" p) l    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
/ Q4 b/ R* V. C& f5 ~. B" B& z7 F# A    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );0 i; V( J  F. [) C0 p3 F/ ]8 f

4 R3 x' C  d% v+ n    /* Write a 0, so that no underrun occurs after releasing the state machine */
/ h- D" ~; a: c4 `7 y    mcasp->regs->XBUF5 = 0;
& V5 O% y; \" y# A$ k    mcasp->regs->RBUF0 = 0;. o; M' H; t6 j6 B, d3 K# G+ I  \

. N- Y& p& V4 G. _1 b    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
1 A6 }4 ^( ~9 E* A) D, u& K    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );+ N" K" ^; X( l( _' [1 c2 W. C
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ) Y: ^% v" s* `# V7 y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
. c# G" K" |& L/ e
  p; z2 [, Q$ B, ^0 I) B8 v# O) |. T    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
1 V1 T6 N6 h- D! ]$ j: `    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
0 {/ B. a% X/ l6 U6 S    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
9 K4 o" G$ x0 M- ~, q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );7 }) X8 B4 P! i( A: r3 i

* @6 u% R$ m7 Q    CSR = 0x0000;! x% v2 G  s$ a
    INTC_INTMUX1 = 0x3d;; s! c9 @, b+ b+ e2 `: Y
    ISTP = (unsigned int)vectors;
9 m# J1 L4 w% D  x: ]/ P    ICR = 0xFFF0;  * |8 x6 G+ E% Y5 z8 t: G- V
    IER |= 0x12;  * f" h9 B6 Q4 l1 s- Y8 e" _2 M
    CSR |= 0x01;  
$ B) L: k% d2 L
7 D( Q8 v/ Q$ m) K# Y7 G6 R, ^! N/ t7 K) c. K* j
* U# b8 {1 `/ B# r9 h
还有就是两个输入输出函数:8 U; A  D- }3 `4 V4 D0 L0 }% l
void output_sample(Int32 out_data), I2 @7 A# h: h4 S7 H
{
6 D9 F. C3 l- R* z) W  AIC31_data.uint = out_data;  6 _9 P/ P8 D: a0 e: _0 g& C9 |
  MCASP1_XBUF5_32BIT = AIC31_data.uint;; e: t- d  \7 Y- \2 `. b  q/ N
}2 B) Y/ h! |% Y4 E3 ^' y! ?
: D7 J2 z' L& h' r, _& l
Int32 input_sample(void). d7 l! D  m' {/ ?
{  
/ a" s+ c4 z, \8 \. r  AIC31_data.uint = MCASP1_RBUF0_32BIT;# Y2 A* u4 K& i% }. d, g
  return (AIC31_data.uint);9 M! [% }& s' S
}
! o9 z' P, \# K' v  I" e8 K3 P7 I0 S+ L' G5 Q( P
分享到:  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-28 20:55 , Processed in 0.042745 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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