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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:+ M, y* X7 v2 p' P7 p# w
main文件:8 g% D# E. o9 J9 G5 x
interrupt void interrupt4(void)  ) n' \: m- o. y3 S+ S
{
- i; |- f/ \4 r. S4 ?9 l& ?# R3 @  Uint32 sample;
' v) p9 q) K% ^# M2 v! N, i3 R" M! Y) G1 t+ g6 F
  sample = input_sample(); // read L + R samples from ADC, b1 s3 [* U3 p1 m$ {2 y& d- D
  output_sample(sample);   // write L + R samples to DAC 3 i" q! ?% k8 U+ \+ p5 m
  return;; [" @: ?! d# I$ N
}
! E: c, n& A- [8 D# n+ ^: R( j+ g9 B8 Q7 H/ H! ]0 W$ U
int main( void )+ p1 n( F1 @+ U$ v
{
; f1 ]: u$ k' G" j4 J/ d$ |- I! L6 K4 V4 T- S
    /* Initialize BSL */
7 a$ ~3 _' L' o3 W5 j; x2 B    EVMC6747_init( );0 U- @+ i6 x& C% G* C5 O
        /* Call evmc6747_intr function */
7 F% u' E" u3 Z+ J5 h9 {5 P% T  ?    aic3106_init( );
( D4 S2 B7 m! R, M/ h        while(1);
, i% B8 J9 {& f8 B8 H" O4 y2 X* w- K}
4 _4 h% G- i2 O  K2 j
8 p8 w: G* E1 S7 [& K. p8 ?* Z- i8 n6 B1 R# U  O
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
2 ~) Q' o# N, L7 p/* Initialize MCASP1 */! S& v/ T: S6 {6 h& n1 d
    mcasp = &MCASP_MODULE_1;: Q7 O( i+ N* `7 t# A
    mcasp->regs->GBLCTL  = 0;       // Reset/ z  c2 g, Z" R! ~# P
    mcasp->regs->RGBLCTL = 0;       // Reset RX. j; {" H5 L3 U. p$ X9 z
    mcasp->regs->XGBLCTL = 0;       // Reset TX; I( a( i  t1 q6 \9 x: @
    mcasp->regs->PWRDEMU = 1;       // Free-running6 l: p8 L. x+ v+ e
   // configure McASP0 receive registers
2 y# W! t, o( K4 e3 Y4 X* d: t    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
/ o& ^1 O* }! C' x    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 v3 ]- u& B+ I7 F, S    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
' q: _' K8 Y8 b' e    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
5 e# d7 h9 D2 C  c& ^    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side): g8 v  J. _# U/ N( M4 H4 Y
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
, ~6 S: U# }! l4 U( e    mcasp->regs->RINTCTL    = 0x00000000; // Not used
+ V) T+ f4 i. {8 b8 ?% k0 m" v+ P    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" g; \) E# D; N, v; c9 y) Z$ I- I8 R5 ]: M
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
* a% o5 @) r$ ]1 L' N    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" M% {& h  p6 O: }    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word3 J2 |) y) W4 P# V; h
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
. O. h% p% ]& _+ ?    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK2 X+ \7 D; L+ D/ v' p  J7 N* M
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
/ h# p+ m: i: n2 H2 L7 ^# Q    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit  t) ]: k* P  Q( y+ O9 n
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256) j8 U" N$ K% K+ p

! h5 b- G( O& j    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
+ ]( y: Y4 S7 V& r3 a* j# L    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT& r" }6 ]/ n) B- G3 [1 i1 h
    mcasp->regs->PFUNC      = 0;          // All MCASPs
# i8 i* M" v+ M7 Z* L    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
2 n" K4 X# m  d5 Z+ o$ e
4 d: W$ j. G- f    mcasp->regs->DITCTL     = 0x00000000; // Not used8 R% Q7 ]7 b  J* c
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
$ J$ M: X- n5 y1 [$ K. ?8 h' f    mcasp->regs->AMUTE      = 0x00000000; // Not used. l9 ]3 V) P; j8 n
# h2 g+ y, G3 Q" d
/* Starting sections of the McASP*/- t- V3 P' i6 W& V
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
* X7 R, A' ~" I% ^    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  # ?* d( I9 g1 c) t
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
" i- v! t: n- D& T  ~+ C! h    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );! i3 h/ z: i' W. o
+ {" ^: Q# V' [7 y0 d5 m
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 5 l3 r. V) Q: g: v4 x0 m* Y- ^
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );  s6 t8 n) W. W5 [% v6 u1 L; D0 {5 Z' O
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ) ^: n+ ]* S# o. L0 |. N  W1 Y) \8 n
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );; g: N! o0 W( |8 T  Z$ z' B

1 D5 s. |  {) [) E% J- x    mcasp->regs->XSTAT = 0x0000ffff;
. S! q  H( }' Q9 n. y  h7 S! K    mcasp->regs->RSTAT = 0x0000ffff; 7 F5 p! r$ h/ B1 j3 Z. x

7 z% _2 s1 H7 b- }    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
3 n- I- s% M4 e; B9 Z1 o- D/ ^% m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
% k& L( h) s7 P, h) L    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 ^9 w2 i% b. q4 ^) q& z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );/ K5 H* t, n. [( E' L

! K8 x( l. [3 v% J9 N3 S    /* Write a 0, so that no underrun occurs after releasing the state machine */' D2 _8 r, v* V
    mcasp->regs->XBUF5 = 0;
+ ~1 Z9 H8 \2 X* t# ~1 q4 H0 r5 N    mcasp->regs->RBUF0 = 0;  L7 A, W3 t  y

& y& k+ t% S( ~2 e8 ]  B( U! Q    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
  {! r& H7 T. R3 M6 Q4 _% Y* u, E    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );$ e0 Q4 P2 w* g' k* D3 g1 M
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
1 o/ H3 D/ {& s' ~4 l9 ~5 Q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
/ `) L* i+ X6 [( ^$ v: G$ V3 Q- P6 z* N" a! B
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
+ }& ?6 t9 \7 z( T) ^/ e    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );8 p' M5 x' a8 J9 ^2 S! Z' l) I' z* ?
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 3 h+ `2 w$ [5 K( [5 F- p
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
5 h: |6 Q8 p" x* O, X& d# J( ]
5 [* O# I  S# k    CSR = 0x0000;) y' L% @$ L+ ^$ g
    INTC_INTMUX1 = 0x3d;' w9 O& n/ h4 }" R. `4 j
    ISTP = (unsigned int)vectors;6 q3 [( G5 y5 x% o
    ICR = 0xFFF0;  
- y& R* u* P0 \8 r0 n/ {7 z  ~" Q& [    IER |= 0x12;  
: s. K3 A1 b. z- E/ }    CSR |= 0x01;  
$ P4 j% a7 j0 I7 ~* B2 }; @8 `  u# ~1 p; L( m

: \' R$ d: B2 K$ @! Z# l; _" z# z% c# I6 E+ s
还有就是两个输入输出函数:
7 b" ~% C* W* R7 f7 zvoid output_sample(Int32 out_data)" P+ g5 H- j1 w
{
7 s' }! @& g; M$ B# x  AIC31_data.uint = out_data;  
0 z$ x4 U$ b: L6 w  MCASP1_XBUF5_32BIT = AIC31_data.uint;2 C6 g% u- X# }, P" G- X+ p# b! O
}
  |( ?8 n! g; d6 Y- m3 y) J
: m# ^- ^; P$ v, b) Y7 v: ]- m# I- X# }Int32 input_sample(void)( a  ~* A+ z. C/ T* |9 ?, n
{  # `9 u: v: w) y- V
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
8 {2 g5 e* K* \& n5 i  return (AIC31_data.uint);
! s1 o- M3 ~# x: ]}
' n3 d/ x. D' L: J  y* R8 j4 M) C3 d% q( 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, 2025-11-18 15:33 , Processed in 0.039510 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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