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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
+ w7 D7 r0 |6 q2 A: Emain文件:  D3 j, X+ e0 U" P0 P! |- j
interrupt void interrupt4(void)  6 t! {# Q0 `5 d: b+ A
{2 N8 w; S8 v. B8 A% J) S1 y! }
  Uint32 sample;
2 f) Y1 a2 y6 W5 L9 t( l6 L. P1 T" c& L# T6 y5 h: o8 |
  sample = input_sample(); // read L + R samples from ADC
+ G5 N5 r% {9 g, X. R6 _  output_sample(sample);   // write L + R samples to DAC 7 `: `7 b4 F( c. o4 K
  return;  M" h( s  S) a6 o9 a, E& B8 F
}9 T! j; n4 O3 t

3 [7 Y, Z* ^4 M/ sint main( void )
$ l1 j: j  D5 F5 ?/ x4 T7 B+ Y{  I8 P* K3 @( J# R& f6 `& g6 |
- t. R2 ]+ p2 S# j- @  Q/ Z6 g
    /* Initialize BSL */# r. `$ F8 d* j; r
    EVMC6747_init( );
8 Z5 L5 M4 B- {' k6 j7 G" X0 }, u8 {        /* Call evmc6747_intr function */9 D, ?1 T- M* b1 s
    aic3106_init( );/ ~/ `2 P5 a& E0 g. y& T3 r
        while(1);
' S# a9 v. g2 f' `* b}
) Q5 f& c# l% K& k* {+ v! w: B  {# J

6 t( t. [' H' h: n; a' L0 p7 }aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
5 G# Z$ f0 S8 K/* Initialize MCASP1 */+ H+ Q4 y7 B. h% O* A: D
    mcasp = &MCASP_MODULE_1;! x; B, ]- b5 t0 r
    mcasp->regs->GBLCTL  = 0;       // Reset
9 x6 J7 }- p. |5 j    mcasp->regs->RGBLCTL = 0;       // Reset RX
% F  j* x0 D4 b+ ~0 [    mcasp->regs->XGBLCTL = 0;       // Reset TX$ [3 w! e4 x' s) t
    mcasp->regs->PWRDEMU = 1;       // Free-running$ U3 q: m# _' O! l/ T6 l
   // configure McASP0 receive registers+ m  ~- L0 W. D, f7 p4 L  z; v7 }
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
# D6 c4 \( {2 T$ C; _( X( e    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% a% L; N  E# ]- a7 b  Z! X% {    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word, l8 V. F+ r- G
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
3 {5 S# G) w" }  a    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
9 y( B' z( f& w    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1; X! f( y8 |: o) P8 o% y6 h$ ~
    mcasp->regs->RINTCTL    = 0x00000000; // Not used) Y% m3 K$ G- e3 t  M; ~7 L1 [
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* |4 @- q( U+ k- z, O; s; u
# H5 e2 f. I, l$ X! J    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used% l6 }' j3 f; M1 o6 _
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 g! T) \) ^* Z4 y4 [! M5 |
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word" @0 a: P: n4 x3 Q3 m
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
7 G8 A7 L# d) L1 |( r! u    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
: z2 F( ]" N) s% b& `# L# q& |9 r    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
1 e6 P3 A" [1 e( Y: s- s0 ?# q    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
3 M- P" u$ ~! c; Z8 f# }    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% [# h  h, L5 N- e4 j0 u( H: v/ @9 I
  J- y( Y, o2 ~% y
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
6 ?3 A  G$ }! c' ]9 T' U* r    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
7 a4 p. k, u( y6 m, }. Z7 E7 O    mcasp->regs->PFUNC      = 0;          // All MCASPs
9 x9 L9 ^# y* U    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX17 H& l3 j7 {+ {7 A6 w
0 R7 n. E0 @8 s$ }
    mcasp->regs->DITCTL     = 0x00000000; // Not used+ U% Q2 c) D  Z1 g8 {/ _) X
    mcasp->regs->DLBCTL     = 0x00000000; // Not used5 O/ P( R/ v/ x' w8 h$ ^
    mcasp->regs->AMUTE      = 0x00000000; // Not used1 a+ k" P) _8 j1 W( z7 j6 B' D. r4 t

1 \1 U: f/ s0 M! p# Y/* Starting sections of the McASP*/9 j* S; J+ T, J) Y, _
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;   q1 v  I# p8 ~8 p: S" A! i
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
' W5 P0 D% c! H3 m  J5 Y: n" z- J" G    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
, D  @( r6 a' J" d    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );0 y! H8 r( E$ R! L! T/ n

/ [3 k, j% G, o0 d) V/ j! I    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 0 D  n2 K! g; d2 \' B6 }
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );3 c* B. ]; Q! t9 r3 {
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 0 ?6 n: }4 ?! {& P! |) b
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );$ ~' s- {: G" i" z7 d2 q

" M. `- B2 n2 D6 t    mcasp->regs->XSTAT = 0x0000ffff; , y5 N4 A! I4 F0 |! _% [. g
    mcasp->regs->RSTAT = 0x0000ffff;
/ w6 [6 J" \7 u$ n0 Q8 u; O# I. e6 H' c- }1 H8 m% A% C8 S
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;* g: Y& O6 ~$ K. E9 W0 ~, R1 J
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );8 |6 \9 ?; E6 z+ W8 p8 B9 j
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
+ A: \8 _9 ?- _. p1 d4 q/ c    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
& t& @5 G, w+ p- e; n1 W8 J( x8 a
3 D4 S" A! b7 P' N3 N- K8 S    /* Write a 0, so that no underrun occurs after releasing the state machine */
; @. [" t0 A2 s' R    mcasp->regs->XBUF5 = 0;
, D! T7 P$ t8 k8 ^4 ^6 X; f    mcasp->regs->RBUF0 = 0;. a: u5 R# }' m7 [  t' Y% c
. v9 r3 `' i5 a4 @+ J. d+ }
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
5 i6 p  p2 j- t, J' w    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );4 x' k- M; ^7 J( O# g  x
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
7 x. F* S) I1 E' C9 T2 E' a    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );) A7 r1 q7 Y2 r# |4 |) n/ m
: }; i. u  j" Y7 F2 h
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; - O) a+ g2 a  U! Q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
* N5 t" h3 _& i5 x6 V    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
0 B4 o1 K; g5 u) f    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
6 z. O2 i. e* R/ ~7 h; R
6 P; {; t- I8 U+ m) P( J9 G7 S* f! Y    CSR = 0x0000;
. m/ c4 I" ~) p6 Q    INTC_INTMUX1 = 0x3d;
! j3 c/ j* t6 f# i- u    ISTP = (unsigned int)vectors;
- ?8 }% [+ J+ d    ICR = 0xFFF0;  
: h- L( I) n; d% r8 |% S; j    IER |= 0x12;  
" e, ~0 [5 D4 g& O% j) \9 t& @+ i    CSR |= 0x01;  6 |6 W4 _& ~( V8 M4 q  |

5 X9 x  W( W" g% w- c5 e' \/ E. Q
! V4 V9 H3 Q$ M
# F( d& i3 }7 L( R1 i$ L( F6 {" m8 e还有就是两个输入输出函数:
4 u7 a% x7 b3 }0 h4 g5 @0 [void output_sample(Int32 out_data)
+ z2 z  s& n) u{. S& x; a$ x2 L! a& H7 u
  AIC31_data.uint = out_data;  
3 o. b% L8 i5 {6 v  MCASP1_XBUF5_32BIT = AIC31_data.uint;3 I/ N. x* }) z6 Y8 Z- y* k1 ^1 b, R
}: p: f7 E9 X8 z. d

" K9 \3 J4 o) x* y8 E: eInt32 input_sample(void)7 e% M2 A' V; f% {; \9 W6 y
{  
( }5 b# R& P' s8 X( D2 z" K" _  AIC31_data.uint = MCASP1_RBUF0_32BIT;
1 P) P1 H/ d+ a% Z) E. M, H7 P  return (AIC31_data.uint);
. o9 S4 b1 L6 e}
- }, a& ~4 O3 j9 z: A- s6 I& y1 b! q1 n) O5 c5 W
分享到:  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-4-3 12:18 , Processed in 0.074204 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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