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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
1 y( x' U) C1 B" q2 Fmain文件:
! ?$ K* J$ I$ |interrupt void interrupt4(void)  % S6 Q9 E7 Y' I, M4 y; B
{& C$ @; _( b! M; H  Y
  Uint32 sample;1 E! `  T2 s$ s

- q% |/ Z4 Z) G  sample = input_sample(); // read L + R samples from ADC
9 G8 g/ ~; \, u4 ~& D7 Y0 W. a& C  output_sample(sample);   // write L + R samples to DAC
: [0 v5 B  q2 ?; U8 o( O  return;1 q1 k4 S  K! k- F) ^+ k8 i2 e6 N
}
# F; _& h+ Q% y
9 K: m( F) V9 Z0 ~" `$ Kint main( void )2 G5 s2 \# ^3 l) m( X1 R, [" k% ~
{
2 @, I5 T- }5 B5 g! _6 X4 W0 U
3 z, T" m! m: g6 f" s    /* Initialize BSL */
, K8 {, m$ r) t4 F    EVMC6747_init( );
: Z+ ~) q' H2 p: U; M        /* Call evmc6747_intr function */
0 w2 o! a6 T4 |8 T+ K    aic3106_init( );
/ l6 m3 k: d- A2 C  T0 L        while(1);( d5 S4 A) k& o0 B! {
}- |4 R% {% f5 g
% R# d3 k9 f  ]8 L% M, k
6 T: ^4 a! J1 F8 _
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
9 j2 x  x+ p3 F/ u/* Initialize MCASP1 */
9 e" x2 |7 K% m( g# C    mcasp = &MCASP_MODULE_1;
, b3 z6 w# G) S* [    mcasp->regs->GBLCTL  = 0;       // Reset
3 A6 Z1 H9 S4 b7 h% ^: X1 k+ [* T    mcasp->regs->RGBLCTL = 0;       // Reset RX/ ^9 h0 _( ~3 P* U0 }6 @
    mcasp->regs->XGBLCTL = 0;       // Reset TX
9 K0 f/ P( E( I    mcasp->regs->PWRDEMU = 1;       // Free-running+ d' U. n1 |# e: x5 O- {
   // configure McASP0 receive registers/ e6 @2 m2 B1 J5 H- M! g8 b
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
  n: n# a8 Y6 e5 P; ~4 W    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 P, l! t7 f+ h# S: V
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
9 U% h9 c( H0 P8 ^; a* j& w  C* @    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)* Z. O4 S0 u3 {9 y  o0 H4 n
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)- P6 H- q8 e: I
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,15 d2 m. q3 ]0 Y! t
    mcasp->regs->RINTCTL    = 0x00000000; // Not used" D1 T( z1 R! Q7 S2 {5 C
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( v( S: O0 `* g/ a& ?/ i  ~, z. x) j1 E) S- B$ t( s
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
- Q  u- F( i( {4 c/ m7 Z' s. d    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" @+ ?& P$ d1 @( B: i5 L  f
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word% A2 u2 T! Q6 l2 z3 X
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16+ Y- T; Z# g$ h; ~* W6 `
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
- Y. G8 }7 ^% c( i9 R! J9 a    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
9 _5 I* |/ D/ T% K& A, R8 l    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit3 r' Y) N/ C% E) G7 ~
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256, A) a9 `& g8 D- K8 C* `8 Q

2 @7 @4 q& f9 ]7 m    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
4 y1 r) [& r1 V" A$ |    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT! s, h' e, A! E2 v
    mcasp->regs->PFUNC      = 0;          // All MCASPs
- v9 E7 R+ n; I# X5 F- G    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1/ ~6 g# f! l1 f4 F. Z) U2 ?0 h" |
' N, a3 S: R2 Z( S6 t
    mcasp->regs->DITCTL     = 0x00000000; // Not used8 v* Z0 w) A# j
    mcasp->regs->DLBCTL     = 0x00000000; // Not used) z! o5 O* Y& J! C& ^
    mcasp->regs->AMUTE      = 0x00000000; // Not used$ u0 Y/ b- Q! S- q+ n
6 X( @* ^2 D1 H( J$ B3 L0 b
/* Starting sections of the McASP*/! m  ^7 a. X- _6 o' \
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 8 E* I$ u6 U- Q9 p5 p( W; L) P
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
' Q# O- h7 ~, R; t8 s    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ! ]) j2 D$ ]! ^) F3 W3 P7 z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );, A, O) M1 P$ ]/ D
' H* w# Y7 n' B
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
3 V9 _( Z- }; c$ F/ C/ f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
% E2 o8 U3 g/ o) r5 Z* Q    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
8 p* l! ~$ }/ `6 v5 ]! _+ \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );9 U, ~; G+ o% g% ^% G* j
6 o  H* k+ W+ n. |
    mcasp->regs->XSTAT = 0x0000ffff; ( \8 W1 O: A' }. }% [- t" f% _. R/ U
    mcasp->regs->RSTAT = 0x0000ffff;
. j0 n2 W! X! \1 b& o/ b! b# H- v# |( N& ~& i
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;+ r& L2 _' z4 t
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
* M. |. E1 x, W% G% s  K6 _" V    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; + d* O4 y, R& {. n  Z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );9 O! j, n4 n4 A& d" W  s  d. {

- N; X/ {# j7 h    /* Write a 0, so that no underrun occurs after releasing the state machine */3 l3 C3 a+ H8 l/ r& b( X  g
    mcasp->regs->XBUF5 = 0;
7 O4 x% _3 N* z4 p' Q' J8 m+ a$ l    mcasp->regs->RBUF0 = 0;
* a( `. n  ~1 T
6 l+ @- W& M6 H: }$ q* P9 ^5 d    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; - b+ P  n( L  q! I1 \8 W5 A
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );$ |; T5 B& D4 U) k3 p/ H& `
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
8 p# J+ n# a- M9 }    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
: Z/ m# e. B: z1 d5 L8 @; @3 ~6 n' l1 M0 _( ^
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ) a, C4 R/ A2 {3 b  D  Y9 l
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );2 }3 o; x, T0 b) m
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
8 p9 L/ V1 W) O! K    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# {! @; a8 e1 P* P& H1 I5 i$ k/ x& B" J  o
    CSR = 0x0000;' {2 K  E1 ]& C0 P5 b2 j3 l+ F
    INTC_INTMUX1 = 0x3d;8 V  ?0 z% W# @3 E/ {, y$ h
    ISTP = (unsigned int)vectors;0 m( s) x' c  W% N
    ICR = 0xFFF0;  
# d3 l" N; w4 @0 _" j2 }    IER |= 0x12;  
* @. p) w1 j; S- _    CSR |= 0x01;  9 `6 t& F8 Y, I: L9 ?1 S
* k1 r, g* H$ X0 c
. L2 X9 B1 _! b5 t9 D% l0 N

# t9 d5 l  O* J8 W还有就是两个输入输出函数:
' s; Y. A& s) w: T( f* hvoid output_sample(Int32 out_data)
+ U/ {" Y" P' p  j5 d1 Q{
/ n+ V& F) j; {% N7 `& _' Y  AIC31_data.uint = out_data;  
& U3 B: U  w! Q/ n  MCASP1_XBUF5_32BIT = AIC31_data.uint;1 s/ G+ z5 g) r. ~
}
6 M& u* g$ V2 U% v$ E  p- f8 w
$ M! _; i7 j9 v# ]' l+ EInt32 input_sample(void), c; F+ s9 R, I  u
{  9 q  e1 q2 X" |' Y8 h
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
( x  \/ d/ J+ J& D5 B  return (AIC31_data.uint);! s* u3 I( C! A9 g2 ]
}! u; `* O0 {* L  R* ]5 Y

0 Y2 ~4 i2 V& w# n9 A+ ]
分享到:  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-1-14 11:58 , Processed in 0.040697 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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