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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
; z/ J. }# }2 B2 s+ T" c& nmain文件:
1 ]% C  L% u# C2 Dinterrupt void interrupt4(void)  
* ~  }# ^6 K9 H7 O4 f{
! c6 G" w* Q, \+ s, e& `  Uint32 sample;
8 e0 a  s- L# {. i' {, P
) G1 C9 A: p5 x7 t) a# \3 `  sample = input_sample(); // read L + R samples from ADC
/ b6 n- t0 R' }: V3 T" n  output_sample(sample);   // write L + R samples to DAC & ]) r- C4 S+ M' Y# W$ s8 q
  return;# L2 }. M4 y2 ?1 k- |, P( u+ @# R
}9 W# A: Y6 O  i+ _  O9 v5 Z
  F) |: G2 h" C8 H1 y
int main( void )
! Z, ?$ w: Y. X{
9 a' F4 h+ R5 u  d) S
( H1 n" y% j4 V( n  m/ C: O8 o    /* Initialize BSL */# A4 d" F7 R# D# H- |5 S
    EVMC6747_init( );
, J1 J) q1 J8 x+ n        /* Call evmc6747_intr function */" x1 o# P, |9 S2 `5 c$ f7 m
    aic3106_init( );
/ A' R7 o: @. M& |- Z' |        while(1);  d8 d8 w3 L4 v$ y, U9 B
}3 I  ^$ C$ ?! L2 l  |; C# Y
6 r3 ?! G5 Y. d  M2 J

: @& N$ {4 o/ N* s& D/ Saic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题% m) K: ^2 a! v2 E; K8 e
/* Initialize MCASP1 */
2 O! f6 Z1 U* P+ W    mcasp = &MCASP_MODULE_1;
6 K2 m- E0 @+ P& I: y, ?' g  s    mcasp->regs->GBLCTL  = 0;       // Reset
5 M6 ]* {% J/ }0 o3 U3 A    mcasp->regs->RGBLCTL = 0;       // Reset RX
; e9 \6 Q& B" L" l0 f% h7 R; j    mcasp->regs->XGBLCTL = 0;       // Reset TX
) K% q9 b; y4 u4 ]- w    mcasp->regs->PWRDEMU = 1;       // Free-running
! j: w5 X' O( p9 b1 D8 E- B   // configure McASP0 receive registers
) Z* U3 t& Y" g" t- \    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used* |- b- Z$ j& E" @( j' D
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 f* X; |, j6 D! N- C' A/ Z8 X    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
/ |- }5 g, Z4 U4 J5 |- z6 b7 x    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
/ X' L/ _# e! f! ]    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
1 z* o" ^* }3 S4 e7 o3 `    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1; ], j# a$ Q1 C3 d& A) H) Y! ^
    mcasp->regs->RINTCTL    = 0x00000000; // Not used% L# V' W# L) x& T8 g/ p
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, v* t4 n, ~( E' w3 l
! e+ Z1 r8 g9 q" P, G    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
' n% O- ~7 a1 h$ y    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 }0 ^  P) z. B, [6 |    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word( m6 o, [2 m- g. X9 R
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16- r* E5 @3 O+ Q* R) Z6 x4 U: f
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK  Q% m- B* y# q/ |! }
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
; }% W8 M  h/ W7 Y    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit2 e" a" V0 e- Y8 ?5 _3 y
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- M" r- W* N2 r# v# ?
9 Q/ x4 {1 R* Q. h
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN/ h( t+ @0 ], r) Y, H# U* ^) X1 p
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
" p+ V4 A3 f0 F  P) \8 x    mcasp->regs->PFUNC      = 0;          // All MCASPs5 d! g) Z# {* r% V- \( o
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1' `9 A3 C+ C( M# ^
! X4 w4 d; M8 g" \
    mcasp->regs->DITCTL     = 0x00000000; // Not used
. r; J, v6 \9 m" N$ ^    mcasp->regs->DLBCTL     = 0x00000000; // Not used
# H. z# a! z* {- A    mcasp->regs->AMUTE      = 0x00000000; // Not used+ Y. y3 a, \) l* x8 |/ j

; |4 c" ^; w1 ?+ V, [/* Starting sections of the McASP*/* V: G; W( T( d% {: Y  D# l
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ) X, u( Q, Y* {7 z! t. ^
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
( d1 t$ K$ F0 \; W* Q- G" G" `    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
% R4 B2 }% k6 T4 L    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
  G, z' @0 ^7 f2 x2 ~
3 G9 }' t  ~9 Y5 [    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 0 p/ v8 f" p  r* `1 T& K" ^: o0 S
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );' \# @/ |/ k7 _. D. J% V
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ; u- u( p- e( N! _$ \6 ~
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );# h+ |$ `7 h$ x( ^) X
7 e$ p7 \2 z- N: d$ T) e" f
    mcasp->regs->XSTAT = 0x0000ffff; 0 i  \- H) Z/ C; h3 V' O9 s* a% M
    mcasp->regs->RSTAT = 0x0000ffff;   N0 T% @& P# K! Z& Y
0 y# O- e( U& X* [% q/ ?& l3 \
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;* w% N0 l' M9 |
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
+ {7 @; m/ j# R, V' ~/ n% l    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;   J7 w# Q6 [7 {- Q( D
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
* r) E0 e7 v  q0 K9 V3 _% S) o4 s1 }# P* }9 _5 |4 V
    /* Write a 0, so that no underrun occurs after releasing the state machine */
3 L. @! i9 m: g0 ?$ g7 Z    mcasp->regs->XBUF5 = 0;
1 A! @' L. a/ E& k3 D    mcasp->regs->RBUF0 = 0;& ?" w" B3 b  Y3 H: `

( N. I/ Z$ ^* V% y; Q9 `! N7 G+ R    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; " `8 S# L  A) S' o2 h6 t0 a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );/ H( J- \9 z, l7 o2 B; b7 [
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
" Q/ X# H% v* C2 r( {    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
5 }2 @3 Z. |) C2 E4 x) T1 j7 G' G. M' R, |+ I, G) T
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ! ]: M1 r; d. s% F; Z# ?
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );  Z3 v# z9 l5 m2 B. _- I
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
3 G/ N/ L4 e& W: f2 V0 L$ J. E/ X    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
: h% W8 i% ]- G& ~" k* a! _- k( z$ x; Y
    CSR = 0x0000;
1 M7 x$ @! D' Q* q    INTC_INTMUX1 = 0x3d;0 X' ~4 b7 A2 w7 {
    ISTP = (unsigned int)vectors;
  G+ q! a0 L9 T& X" s. T, L    ICR = 0xFFF0;  
9 [4 [3 A  z1 z* t# j& g    IER |= 0x12;  
$ `3 V# m* Y% B    CSR |= 0x01;  
5 ?1 }$ n! S" K1 Y% E2 q! Z* ^8 f! Z4 i6 w: r; `! Q* _
. z  E* t! ^* H7 o9 c9 E9 {4 c

* j- V$ Z4 T6 {% ~8 ~$ l, H! [还有就是两个输入输出函数:7 c4 J: I  {4 i
void output_sample(Int32 out_data)
# p: I, u+ r7 a7 K% r{
/ X. T5 D1 W/ A7 `: S( W  AIC31_data.uint = out_data;  
* m. }6 C, l% x5 ^* J3 ]1 u  MCASP1_XBUF5_32BIT = AIC31_data.uint;- I2 v1 d. @2 J9 P
}
; @4 [1 I& ?6 U# q4 U
! ?1 O5 w& D4 s# M' p7 AInt32 input_sample(void)/ a( g/ K9 N* s8 r
{  . u, E0 d. [  E$ T% ?
  AIC31_data.uint = MCASP1_RBUF0_32BIT;) Y, V* h8 O* \- J: c' w3 q! C9 g6 K* {
  return (AIC31_data.uint);
6 [+ ?3 h/ q. {/ Y+ o) [% z}
$ S) S# X% A8 Q$ C' s7 A7 D
# J4 x: v, j) ]- C' _0 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, 2025-11-12 07:10 , Processed in 0.045250 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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