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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:3 _" \" M" L2 k9 Q: c
main文件:
; K- G9 y: j/ g& n; J& u& A# kinterrupt void interrupt4(void)    u$ k2 `* n, S+ ?( i2 }- W
{
! p1 E' O) S) ~: \& R  Uint32 sample;) p( Y# {4 e5 d/ W) \- L
4 o1 p: ~6 S9 y4 K7 T, {
  sample = input_sample(); // read L + R samples from ADC
' ]  v/ _9 q% H; C; ?! f  output_sample(sample);   // write L + R samples to DAC
( {4 x4 Q# U: a7 f0 v5 O+ r+ y; I  return;
! S2 E/ ^: k5 |+ r% @}1 k; A' D* g+ W5 k/ L0 o3 b- Z

4 f  |5 O$ X0 F  P7 K" Qint main( void )/ `( D' t8 ]/ r2 I! O
{5 `8 ]3 P5 G- w$ o' N8 `- s

# L7 Q! T( \' p  i    /* Initialize BSL */% K! Z( U  R/ ~" a. Y7 F+ a7 ?3 {
    EVMC6747_init( );$ e$ }9 p* e1 Q, e$ t+ C# C
        /* Call evmc6747_intr function */
/ l( k6 s: h. {% E& M    aic3106_init( );9 m4 Q  B. O; h% V, n7 |
        while(1);! E* z! P( ^2 A0 `7 T
}! F1 q6 h* Y6 F% \- F

+ ?; Y. k' R3 L& H& M
. B: Q- [8 f8 Eaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题1 d' K1 g1 `( U% U( \
/* Initialize MCASP1 */' G) l8 C6 R: P( H4 z4 T3 R7 M( ~
    mcasp = &MCASP_MODULE_1;
, E' C- G- ?4 P! U- Q    mcasp->regs->GBLCTL  = 0;       // Reset$ I  K6 M5 G$ s2 G
    mcasp->regs->RGBLCTL = 0;       // Reset RX+ T3 v! t5 x+ Z, ~$ l
    mcasp->regs->XGBLCTL = 0;       // Reset TX2 N' R* l; E& d
    mcasp->regs->PWRDEMU = 1;       // Free-running2 r* O) q$ ^8 i$ |- O5 @$ Z
   // configure McASP0 receive registers
. m$ L9 l& R7 H, K7 z- `    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
  l9 C) h/ e9 s    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: l& g% a! p4 e5 }; z- }
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word4 h# l  ?/ i( C2 u1 p. G
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)% W# r3 H: [. j0 m7 D
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
" g: K* M0 b* x% J! |: a    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
/ T* e9 q, y8 z0 W; s/ A2 ?    mcasp->regs->RINTCTL    = 0x00000000; // Not used/ C) i3 q0 a% ~; I  s
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 l6 [  q1 W2 L" g1 h+ u' g

) a* G! C& v3 a2 z: X1 U% q- D    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
# I* ~7 ]# r* `( T& s7 ]0 _    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 k# B1 l6 a4 p0 q) p
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
0 Z. V6 }) U1 _7 ~- C- d0 N5 B8 ?    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
# J2 F: F3 [* C. F6 t0 k: d1 a    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK" r; x8 _7 W5 c' o/ L, D
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
# u7 Z0 A' E- c& x8 x7 o    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit: V# D& b  h" q/ P2 e/ E; R. ]$ s( {
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 n+ }0 \# E/ r( E  ]& s
9 k# m5 _" k( F8 Q2 {1 G
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
$ \7 H9 b/ Z+ R( b    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
" s1 I3 ^) Q  ?0 ~    mcasp->regs->PFUNC      = 0;          // All MCASPs
, X3 ~3 W/ R* o5 ]    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1! g4 z( O8 J! {
6 r% m1 g4 m: [; y# A
    mcasp->regs->DITCTL     = 0x00000000; // Not used+ T' e1 Z' _( `
    mcasp->regs->DLBCTL     = 0x00000000; // Not used$ ^, @# T" j3 I
    mcasp->regs->AMUTE      = 0x00000000; // Not used% y2 B$ I2 K- K9 u

$ Z- e  l6 O4 I: Y! N% i/* Starting sections of the McASP*/
; l! r+ ~8 K) k. k& |2 }* z# H    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 9 y5 P% x( _8 E2 Z- D" U  R' _
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
6 M0 D! h- `0 b7 M/ T# j9 m    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 1 W6 }+ |/ O# D4 i
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( {. v/ E7 w( F) U  M6 n( z
2 n9 H! T- q& R    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
7 O9 w5 z: N& g- A$ I( J! V    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );+ M) w8 r7 G( \8 j3 q" g6 H; T
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; $ ~& V7 \# J( N. G( m
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
$ X3 l7 c- l. L& J% N- ?. N5 ]; J; b, o* B+ a2 p
    mcasp->regs->XSTAT = 0x0000ffff; % L1 v, O; e! i! y
    mcasp->regs->RSTAT = 0x0000ffff; 2 x! G% j$ P0 W7 s) h9 U

) p* n- {( f5 o3 ]! O# v0 }; z8 P    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
( f/ W8 a' K$ K  h) e    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
; ~, e6 P& [0 J# c    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 8 t' N8 o+ {1 J) w# N$ r
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
2 ~5 N. p/ g* d. `% E; Z: F4 B4 n+ k3 _' M) R' M; E5 \
    /* Write a 0, so that no underrun occurs after releasing the state machine */% a$ E" X/ r8 s* Z& k
    mcasp->regs->XBUF5 = 0;
& z# b/ J& J, U) ]+ z$ J  ^' x    mcasp->regs->RBUF0 = 0;' c" x  {8 y3 R# Q0 j% |& h
: a3 G3 G& a+ E5 r
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
$ @  f+ |6 s: d9 ?% X+ a    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
; C  c$ l( e$ R% m( ~! F    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
5 j) A: ?& |5 a0 J- ^    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
# x5 C$ f. @' `+ E$ S- h5 l- y2 |0 f  H+ c
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
+ {8 r" P2 q! @' F! x* r! o    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
5 f" h) _; C+ s- @% I1 L    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
* _3 u9 w3 n; R) _    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );% L. n8 i5 s: P( [+ U5 \6 ]

1 Y' Y" m  Q* S; B# F& }    CSR = 0x0000;6 _! V0 z9 r) U- [& q
    INTC_INTMUX1 = 0x3d;8 Q# a/ V  Z' m
    ISTP = (unsigned int)vectors;
, n9 a7 \4 g/ L0 M/ H, w& ~1 D    ICR = 0xFFF0;  
& R& i' u5 X- I1 b9 q* E% g    IER |= 0x12;  
5 l* V; q: q( e    CSR |= 0x01;  
3 i9 [" x1 a- o" s2 G2 |, O; A# E6 k- i
. i6 y1 @- g4 j+ ]2 a( s& D
6 w0 N, l3 H$ T" C) p
还有就是两个输入输出函数:  |' H4 |0 V& l0 d3 B; B5 t! S1 W7 J
void output_sample(Int32 out_data)
$ ^8 N! x7 q- a{
+ S" h- J; J2 }3 l! m  AIC31_data.uint = out_data;  / l. A$ {; n: t7 k# e, A
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
1 R; H/ Z4 e4 {, \1 w; c}0 C1 \) V% u- \" R: @# Z4 C

! }5 O" Q; {: \! U* J8 B( ?Int32 input_sample(void)6 i* b9 K- G% u5 D: R- E
{  - o% s% k2 G) ^3 o! S; y! f( Q
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
$ r% V4 e8 b" _- F' ?  return (AIC31_data.uint);
2 _8 ^4 {0 j; {! R6 u}- k! m) K. z3 k1 h- G' g% [

1 X$ ^, v" S4 G2 S/ ~7 i
分享到:  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-11-26 10:14 , Processed in 0.037516 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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