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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:" M# p4 C0 X) x' C0 Q8 R
main文件:8 B  v1 H) n7 t! r
interrupt void interrupt4(void)  
- {% K0 I/ b3 q" O6 x9 O{
# B. [( }/ t2 a8 [- o  Uint32 sample;
$ O: @8 u( F. `2 ?2 N9 @
0 c3 D1 ^. \- Z) c. d  sample = input_sample(); // read L + R samples from ADC# k1 p3 Q2 u0 M3 j; s" t. ~; g
  output_sample(sample);   // write L + R samples to DAC 0 [4 D$ E/ J: _- s/ w
  return;
, X, G* U4 E2 K' G+ `1 x}
6 \2 |+ |8 a" V3 m7 t
: G0 j5 }- X, f- a3 i7 `; q* vint main( void )0 k% r& m, _, A+ Y
{
, N  q$ a3 ]- {1 k, X
; w: m& k6 K0 t    /* Initialize BSL */
9 Q4 I4 k9 F7 n8 \5 T7 b    EVMC6747_init( );
! Z. T; a  S3 B/ J0 w, r3 ?1 n. q        /* Call evmc6747_intr function */0 D) \2 N2 `& U/ T9 j! i
    aic3106_init( );3 j+ q  F3 \, A2 G. L
        while(1);
' Y) J1 @% f9 ~7 l}2 I/ Y3 x' E7 K! j, b! B8 O4 F
9 A6 \' u  {, O+ o; y

; h0 p# i' x# ^- ~% ]; U, laic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题0 A6 _+ O/ A0 R5 W4 h
/* Initialize MCASP1 */3 H) k+ r+ q) |8 k9 s$ z7 ]" l2 G
    mcasp = &MCASP_MODULE_1;0 b1 o1 `4 G  \& i3 c# n
    mcasp->regs->GBLCTL  = 0;       // Reset* k# L; o3 o" L- g$ N
    mcasp->regs->RGBLCTL = 0;       // Reset RX
+ D. e! v: j6 F% U4 k. B/ N    mcasp->regs->XGBLCTL = 0;       // Reset TX$ T1 c: n( f& V4 y; g7 p
    mcasp->regs->PWRDEMU = 1;       // Free-running
+ g1 m% e$ h& \2 T   // configure McASP0 receive registers
  S4 y' K8 k- @; a4 C+ @    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used7 n- `( {! Q4 ^+ K- ]7 \
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. O/ i' M# ]6 C
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word4 v# P: x2 n' X7 X* o* f7 U
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side), y  ?* u+ Q; u, O' o
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
4 ^& h  \  g% `    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1& x+ _4 e! [5 F  c# w! ]# K* j
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
7 a# P5 n. G( R    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, x$ F; G4 F, p: V5 x% M/ A7 |/ b: l5 @! D7 w% T0 [4 r
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used) u; v% j1 v, L9 f1 g/ e- T
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' H" y. x0 ^- p( w' p! {8 r, y    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word0 |. @5 L& }  v0 K) h& J7 q
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
* h& P: k0 z4 C, m    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK' z& R, S- @9 u  V" _1 E
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1% Y6 P$ d3 ?9 S+ e1 g
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
, o$ L' k8 F8 C7 s% q: C, N    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 ?" [4 d% ?' U# e

& U4 g7 m, V9 E+ N  o  A/ w$ C    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
7 Q2 L: B& l/ ?7 O    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
9 b! n* d$ `3 j$ i    mcasp->regs->PFUNC      = 0;          // All MCASPs" p% W. |) f$ ?5 U
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
# [* d1 B: J4 s& t8 W( h" Z3 p' w$ [( _" m. h# \
    mcasp->regs->DITCTL     = 0x00000000; // Not used, m, v8 E5 c8 L/ ]3 O# t6 Y
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
0 L( }4 R1 X0 G& Y7 u/ u+ _+ i9 [5 }    mcasp->regs->AMUTE      = 0x00000000; // Not used# I, a  V) u( x

' ~# R  ]/ M& T" H2 ]5 b9 |/ c/ m/* Starting sections of the McASP*/
. x4 W8 W9 h) [    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ) J/ T: c; z% c6 ?* D
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  6 {7 O( n7 c5 ~' Q! }
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
1 x' S: ~; u' l. g    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );$ y4 D$ I7 v" ~: E7 d
! x! ^4 T0 N: z/ ^% M% B& a. G
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; # k( k9 W6 ?& g
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
# z7 I9 y1 o7 _! F7 @- V+ D. `" w    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; & I% {' [* J6 H
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
  v* q) I# U- R  F
# L; v+ c, T8 d# l# ^4 D    mcasp->regs->XSTAT = 0x0000ffff; # v' z# O8 L$ V# R* K
    mcasp->regs->RSTAT = 0x0000ffff; 5 Y1 y, @' b0 O2 k/ c* {$ C2 m
. l7 O5 t- u# d# n  B  D
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
& f( _/ n  r( J) w    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );, m+ q' j9 i% d. N9 f4 _% ]
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ( Y5 c, |) m: m: Z$ M
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
3 b/ V% C7 ]7 F* G6 U: A0 V
) ]# k) d# o8 Z$ F    /* Write a 0, so that no underrun occurs after releasing the state machine */9 `0 p) }/ C3 z  y
    mcasp->regs->XBUF5 = 0;
3 _+ S+ S7 y6 E6 @7 p: i$ M* d( A    mcasp->regs->RBUF0 = 0;0 N5 ~, J6 T+ ]' h/ b# n0 V- @

6 e4 y0 ^4 [9 u* `# r/ q    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
2 R! o1 c! t# e3 y4 S% I    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );( B9 t5 p+ }; o
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 1 i% u5 S" i, J* p  R! K$ {$ s
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );/ z3 G* l+ I; m& b
- G, w' f6 _7 E: _8 x( Y
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 3 ^1 [3 u  b7 G& P
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
1 {0 F+ l: Z) j- t7 I/ |- s; p$ R    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
. K7 W  \) s. k$ G; B& y+ E! C5 L    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );2 R& h8 }0 b: G& h( X

& d" I$ U4 F1 I+ k; P0 X9 R    CSR = 0x0000;7 P) _6 d" x' b
    INTC_INTMUX1 = 0x3d;
- z3 M, \. q( \& L/ J    ISTP = (unsigned int)vectors;& h/ Z* }0 g, i. W( j
    ICR = 0xFFF0;  . S1 p9 z  o( d" N3 z! q, k
    IER |= 0x12;  
, e; M2 D: N) ~! ]! e    CSR |= 0x01;  
" I9 c: _4 y* s4 N
: {- u9 C8 ?& x2 S- G" `3 N
' m, R3 I& k2 U
; L5 g% Q0 y+ F+ @, K" x还有就是两个输入输出函数:" {2 T6 K! K* T: j+ j) x" O
void output_sample(Int32 out_data)- f/ s; w/ h( ~- H( P5 A
{
) F9 F$ R1 ]' a- c" I/ r- k* c  AIC31_data.uint = out_data;  
' f4 p( D- T% N! w, z  MCASP1_XBUF5_32BIT = AIC31_data.uint;
- I* v# s* E1 _: n5 w; z- |$ p  b}
+ A0 R( r- P) L1 o; _& h# G( v
7 n: H' k2 M- ]2 a% ?4 S, sInt32 input_sample(void)
/ J0 v  v  O+ Y  @{  
: x, j& D9 Z0 D' ^) s6 [- N  AIC31_data.uint = MCASP1_RBUF0_32BIT;
0 K4 z% Y* ]# V4 g  return (AIC31_data.uint);( T1 O. t8 r" x; U4 m
}) x# d7 t7 @7 o8 a0 {( _( i
9 D9 L9 a% ~4 b% c6 C# }) 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-2-9 23:20 , Processed in 0.042429 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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