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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:; P3 W& X0 L) o  D, F
main文件:; k- B9 E& |$ }
interrupt void interrupt4(void)  - D+ S3 ?/ w8 ~; }& T  s
{1 |& X0 S; r9 G& o4 z& {2 k/ d# Y1 h
  Uint32 sample;9 C8 k6 ^6 O6 h/ w5 U

- Y' W: \# [& y  sample = input_sample(); // read L + R samples from ADC- O2 J" p4 G- g% }
  output_sample(sample);   // write L + R samples to DAC / F" |$ E9 f: V; o2 |+ r! V
  return;9 {; r' L1 G/ l4 E
}
- ]" E& Q$ u9 S" u
& h2 F) d& H' u2 mint main( void )
5 ?9 a/ o' J# K{
2 ^/ `8 k! P0 e4 b7 V. b: {; G  @5 t7 \: x% s9 r% t/ }% g1 [2 U
    /* Initialize BSL */" C# B8 I% m9 D% Z
    EVMC6747_init( );
; s8 I9 K' a: J* R4 d' j        /* Call evmc6747_intr function */1 ^- W7 b5 U( u8 `( T5 n, |) s4 k
    aic3106_init( );% Z+ k) L4 X$ {7 b1 B2 J
        while(1);
0 Y+ m6 h) J6 b: K" b' {}
% U6 O" i1 g  L& P( x& W
4 M; t: ?) n7 X9 i) `$ V8 S' r$ o5 U5 u
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
+ t7 {! n/ _( U: G" e/* Initialize MCASP1 */7 J+ m* t9 c- k7 b& ~6 g" s
    mcasp = &MCASP_MODULE_1;
1 Z: W7 V5 X5 @$ V* V& ?2 a    mcasp->regs->GBLCTL  = 0;       // Reset
* D# Y" F9 a' Y) m! ~! u/ e" K    mcasp->regs->RGBLCTL = 0;       // Reset RX
; j; I- O0 q4 G" _, J1 |- _- }0 U    mcasp->regs->XGBLCTL = 0;       // Reset TX
% X% X9 [; A* A8 {# G# f: ~9 N    mcasp->regs->PWRDEMU = 1;       // Free-running
$ F$ h2 G( I8 M$ q" [. l1 A6 _+ i+ K   // configure McASP0 receive registers& X# F- ?/ M0 R8 x. L) ~( R* z
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
# A. h1 w: i" z( L" C7 v- L) T    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, y$ a# W# i, e0 V
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word- z- I6 @( B* s" I& m2 U
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)4 m. i# e# a6 ?/ C# Y' ]
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)5 V2 A, P9 C: k: Z7 ^
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1) l) q) W6 |4 X. S* P
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
; h+ |3 b6 V' }    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( z  F4 O7 h' z1 Y: E" ~+ r" C, O

) y9 p; X- n9 B. e    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
  h& O' H1 O: Z    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' z% k8 l" r% X* F0 j    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word6 _  Z/ j3 {1 u( L$ Q6 W% E( p" t+ J2 ~
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-167 t+ T7 P* M/ Q% v- L
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
0 @8 n5 ~: m1 {4 `+ L9 d    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
$ a- X, y5 B/ X# A3 Y9 P9 ~( ~4 C9 I  O    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit4 c$ `. k; V: p2 R' T
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256+ I5 R! k  M/ V6 P: q6 W
2 [1 e9 Z9 V- R/ u; N2 z2 A+ h
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN' P0 R' x) \! E1 @7 H9 s
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT# X7 Y) |) ?8 `- S- ]. W
    mcasp->regs->PFUNC      = 0;          // All MCASPs& f/ q3 D, F9 u4 x1 @% h8 l
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX10 Q$ B, O; |6 c9 p2 Y7 b, ~

( ?( g% \7 \% |    mcasp->regs->DITCTL     = 0x00000000; // Not used
# K8 s2 F5 W1 ]4 V  R* j) N& M    mcasp->regs->DLBCTL     = 0x00000000; // Not used
7 E9 B' @, P. O7 u, |$ ?8 R- G% b. E9 D    mcasp->regs->AMUTE      = 0x00000000; // Not used6 v3 K, Q: v( u1 H
$ p6 R' \- x  Q) v9 S5 N& t  i8 v
/* Starting sections of the McASP*/
" N9 r3 [; o* H% P    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
6 }; f1 o* [- z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
) M9 w  o# ?% Z) X    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 2 w2 W8 s2 P2 f3 P& x3 W- h: p
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );* m3 A1 F. w1 @+ d

# |% {- ~6 S7 o2 o% k9 Z% t/ m    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; : J! l9 z0 o: k& @0 O9 E) |
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );7 l0 b' C6 ^) ~$ `3 s2 b2 g
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
. a4 m2 m. I) f/ v    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
& M* m# B; \& A  h& n4 q$ ]9 r; `# Y3 E' a2 e$ n; ?+ `1 ?
    mcasp->regs->XSTAT = 0x0000ffff; & o5 t2 ?2 R5 p* N3 E. w8 \
    mcasp->regs->RSTAT = 0x0000ffff;
$ Q7 l* M. J$ C7 b5 G& j+ M7 ]5 Y2 k3 \
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;' D, h# |0 W- M5 a2 o  S9 o
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );$ S( q3 z1 x  h5 J
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 8 l$ z$ e1 @% Y) c, z' V- l7 O
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );/ S7 d  ^" ?+ k( x. D. b+ P) N9 E
" h+ c9 X' B( D1 A. N" \
    /* Write a 0, so that no underrun occurs after releasing the state machine */4 K$ G* x' C& H* ]) M$ Q
    mcasp->regs->XBUF5 = 0;6 C' Q5 Z# v1 [, b  @( \
    mcasp->regs->RBUF0 = 0;! n  F" H3 t' ]3 o5 @5 R9 m$ T7 r, r
) h: P; r" R0 F- O
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
/ _* D8 }3 |( n9 d; g9 _    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
. G6 N& W$ e$ G, D$ P+ {% @, h' q    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
/ G1 X/ E. |$ n3 L9 J. n5 _    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
* d/ Z: H+ T4 E+ M1 ~# K7 ]4 H& x& W- t9 _' H' D7 ^* z
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; & P. f) e: k% N' |8 j; [
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );; d4 u9 ~$ o' Y
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
0 f: [. y# C* H& ?5 B    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );/ X# t1 e- m$ v! P$ ~
8 D# h/ V6 N/ M0 Y1 J) H- f
    CSR = 0x0000;8 D7 a# W0 D; P! h
    INTC_INTMUX1 = 0x3d;! I- j, a$ j) G6 s2 q
    ISTP = (unsigned int)vectors;* k* R2 S) w/ B, |4 \
    ICR = 0xFFF0;  6 \+ T* R* p% w- \- n( s
    IER |= 0x12;    M1 }1 T( B3 q' F0 z6 s$ X
    CSR |= 0x01;  
' ?: }" Q) h/ [- b* B2 X+ S  {  ]
. H1 f1 @; e' {9 j- P0 c5 W3 \0 O! P2 W' K; w' A7 ^2 U

$ j8 p* m: X, F% M0 F# L还有就是两个输入输出函数:
( a5 b+ E1 a, @void output_sample(Int32 out_data)
% S- v7 y7 Z# r2 N{. k, D1 f% o& D* R0 B
  AIC31_data.uint = out_data;  
) A# K; X; P. o" {! ~; S* X  MCASP1_XBUF5_32BIT = AIC31_data.uint;) v. T' t" \$ g# p
}
4 X4 c, W! V- d. `" Q) Q6 @
# m" [' f, N: ~2 J& Z; z, KInt32 input_sample(void)0 F) c0 [' C+ n% j4 v/ i
{  ! D' j" d; S$ i' o
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
1 ?0 g7 ]' A$ w$ n0 f  return (AIC31_data.uint);1 {, y! r% E4 [! \# i# \
}
9 w  S# Q8 m# h9 h0 m/ }! c$ m. K% L5 h' c4 C7 g- C
分享到:  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-27 03:35 , Processed in 0.050770 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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