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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:8 z! q7 w; ~) ?9 Y
main文件:
. R* ^1 s5 ~/ {# D' X4 Ginterrupt void interrupt4(void)  
, p5 ]( V5 K9 A) s{
3 k: e! L+ ~& }4 v3 Q  Uint32 sample;$ P! z6 D0 ?. Y& q
/ m2 I# H4 _; w# e+ T
  sample = input_sample(); // read L + R samples from ADC
9 F. l1 E! H. P* H) s/ s; |  output_sample(sample);   // write L + R samples to DAC
' h! r  ]; p' x' o  ]$ P4 g  return;
$ O4 R. |7 ^  K8 g, [+ D0 t. Y}
! i" N& g9 V* H; A9 g9 J4 {3 {, A) E  s0 k8 w  G( V" a
int main( void )) Q' t0 L4 l8 X5 _+ [! i
{) @/ V4 T2 v$ N/ D* _% D1 B- }- z
/ D6 ?2 L' F% Y! T$ r0 R
    /* Initialize BSL */
* }. h* k1 C$ s: r5 |    EVMC6747_init( );. _' |! e' u0 E* X: Z
        /* Call evmc6747_intr function */, ~, A) A: c: r  `- n6 ^
    aic3106_init( );
. X( {+ u# E& {/ ?        while(1);
8 \! a. ^4 C6 k! _}
- D. F; V: X4 C& e0 o  Y' t6 U  C' v& d! k! p7 ]7 o: V
7 S3 f4 a' ^) Z. m( `# d" |! Q
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题( T, G: u  m/ \9 w! W$ N8 p* P3 R
/* Initialize MCASP1 */
7 v# d1 B8 R8 G3 u( |- M2 R    mcasp = &MCASP_MODULE_1;2 Y# z8 g" E% k! [
    mcasp->regs->GBLCTL  = 0;       // Reset, `$ d3 H1 Q9 n9 W
    mcasp->regs->RGBLCTL = 0;       // Reset RX8 X: R- j( M' Y2 _, Z
    mcasp->regs->XGBLCTL = 0;       // Reset TX
* I- i  n6 M6 n    mcasp->regs->PWRDEMU = 1;       // Free-running- i/ }6 F: b/ q; v" ~
   // configure McASP0 receive registers- A, ?* f/ H$ w  e
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
2 C7 D6 ~+ ]9 n& l- x    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. k* A3 _' F; b2 Z8 Q% E: v
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
/ ^) C' q0 |9 R% r/ \. r5 O    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)/ f: l) M; ~$ ^. E; g$ z8 p! Z6 p
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)& m1 ?. a8 @- ~! C* |0 o" N
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1, V  S/ b6 p' y) I+ ^7 ~7 `
    mcasp->regs->RINTCTL    = 0x00000000; // Not used- @  T4 ~& T, M- Z" V+ X
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; D  X% k( `- p

* Z2 y& ~( u  F+ ]5 ?' Q0 X    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
, \( z% ]' R8 K9 T) g" ?    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 @% H7 Q$ O& s" `$ O    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
+ I/ o% x2 B+ O    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-163 A2 |' R! Y8 H- G
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
0 m  f( U7 p# M    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
+ q1 R# @" y! F% t    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit5 ^9 L2 K) D( }4 E, D* g
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2561 O1 q) U& S; m6 |0 y2 E; w* j
) l# f. ^& Q! u# ]9 {+ ]
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN% p( U1 w; k  l- K" [* L; A
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT6 s, u$ Y7 [- n' b4 [; o$ [6 }" D
    mcasp->regs->PFUNC      = 0;          // All MCASPs0 ~3 u: q, \. s( z7 Q! D
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX14 e# y# w$ g9 i) ]% @

3 S" f0 n& d( m6 y& O" t    mcasp->regs->DITCTL     = 0x00000000; // Not used
* f& d: m" t4 q* a6 Q9 ?7 M/ c1 N& x    mcasp->regs->DLBCTL     = 0x00000000; // Not used
( p. m) V7 l; x, D4 O& X# ]* J9 Q* V. O. ]    mcasp->regs->AMUTE      = 0x00000000; // Not used
+ E3 m5 Y2 @$ Z3 L, @& K3 n# n% E: m" G
/* Starting sections of the McASP*/, w9 ?1 g; Q4 v) U
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
, x1 q( i3 K9 G7 H: X    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
8 m; o! a' @9 g; u1 a6 ~    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
+ Q) Z6 L8 h; w# _8 A$ a. W    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
, {2 y  S8 {5 `& {8 b- ]
; D" v3 `% p- H* h( @2 o    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
/ c- T9 U' h' G- w    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
- w2 D1 Y! x6 h7 F' w    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
2 `$ Y9 I6 Q) X0 Y8 c    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );' N) k( m+ `2 i! s# u

4 c( X, n1 I2 V% ?. ?. U    mcasp->regs->XSTAT = 0x0000ffff; 8 @, u% a" G! p% w4 k
    mcasp->regs->RSTAT = 0x0000ffff;
1 |& i5 m1 ~2 f( h. i) {& R  B( O5 C$ ^" F9 M; U+ [4 f
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
4 Z1 M6 Z8 X% U" h: j, V8 M    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );1 `4 x: o% h9 |3 E" f, Y* E+ i
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 F. b; Z! M" J( E
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
& x4 c) i. g; ]/ {, E9 w" ?+ c! `) \  a9 Y6 r3 t) K" i
    /* Write a 0, so that no underrun occurs after releasing the state machine */8 T9 H( g7 k% E% R; u* k
    mcasp->regs->XBUF5 = 0;
) H( V4 C( S. d) d7 _  F5 P( I    mcasp->regs->RBUF0 = 0;( }9 {% j$ i2 w2 j# |; ~
( |6 w. h, d4 h: F) S
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
7 R& c- o3 v, _9 O/ ]' U8 m/ e+ e6 v    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );  l6 W, p/ O- p& w* a  V' g
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; : D* A- o) ?( {4 Q) e
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
' W) R9 {% W! P7 N0 p/ v% L/ y
. P" ~' N) @9 \7 u# j# m    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
* k/ h7 D  U1 G! k0 k! E% E7 q& z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
' b. I" |- P6 w( G7 y- b4 j    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 9 ?; ?% y1 b! h& ^' s# f% @
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# F5 i6 e% e$ V7 Y: ^2 l# c1 j; [& [' c1 E* O- K; t8 L9 |
    CSR = 0x0000;
& g* z! G; V7 n    INTC_INTMUX1 = 0x3d;1 O1 }+ c- R' b& B
    ISTP = (unsigned int)vectors;
- N% a5 ?" Z% w2 j5 @5 K; K    ICR = 0xFFF0;  
; f- b8 v6 m9 {# N    IER |= 0x12;  % ?2 \* k' t/ M! ^
    CSR |= 0x01;  
9 v9 O  K; Q& N4 D8 S
( G8 S4 z) Z3 [3 ?' o2 Q& P3 Y& |! W" H
7 T; s0 R1 P* e4 \( ^$ I  ]
还有就是两个输入输出函数:) Q) P0 _& R9 c" n7 o
void output_sample(Int32 out_data)7 V2 _1 c( ?3 H/ f
{2 l, v: M+ ], M- M# D4 ?' K
  AIC31_data.uint = out_data;  - {# @+ z: v- r) m- i
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
6 m3 U9 L. e: F# X: s: N8 ~}+ Y0 Z- N3 `. a% t* e' I
0 f- m/ j2 y; Z8 x+ X
Int32 input_sample(void)
2 Y! Q& U7 v6 ~% {2 k3 ]* R{  
$ ^/ |. v3 @7 k" p  AIC31_data.uint = MCASP1_RBUF0_32BIT;: U6 B3 }- S' _2 e2 }: S: {  U. E
  return (AIC31_data.uint);, j' B" u8 |% }6 }$ o4 v
}/ i' K  D% z8 {- `6 A
$ I1 U" S; l  {; }  ]& y  z5 }
分享到:  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-7-8 19:32 , Processed in 0.036891 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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