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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:$ J8 N6 }6 S# d, ], G# v* Z
main文件:0 w' R2 o& Q& d2 w/ W# ^% C! U
interrupt void interrupt4(void)  / l( W  H, X& }, \+ x
{
/ G- _; Q2 X1 t4 L8 s3 B9 _' p  Uint32 sample;3 P4 [9 p- i. d# G- \; ]8 t7 \4 d  @

& x1 v# Q* s6 X, P, F# [# M5 F  sample = input_sample(); // read L + R samples from ADC
7 c2 z* B9 ], @1 k, m$ D, ?0 b  output_sample(sample);   // write L + R samples to DAC
( G" Q. Z! |' ]% s8 ?! m/ @- ~  return;3 R: L+ E2 }5 k8 F' x
}
+ `6 K" q; ~& i5 K6 O9 i# a1 f& s; h9 `  ?* Z3 c
int main( void )
( @0 J( O( x- n2 D* e" ]{9 S% B1 x8 f9 Q
& U4 G+ {) R* t4 S# \- ~
    /* Initialize BSL */& P& h, C3 g$ J
    EVMC6747_init( );% v$ c7 C. k; @% o8 X% N
        /* Call evmc6747_intr function */
% v6 Q9 d' G8 H6 Z- s7 o    aic3106_init( );2 I; ~; B& k5 I* p) ~' U/ R
        while(1);
) X& n: i& s3 X}
( q! L9 ^( c! n3 ?
2 r5 B( B& Z7 d& g6 q
; }9 I0 L- C5 _' \" ^1 ]aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题/ ]( ~5 o. T6 _5 b
/* Initialize MCASP1 */
- P! \9 s; D# S  U8 M    mcasp = &MCASP_MODULE_1;
9 }8 ]- M- I: E' O3 E6 }: o    mcasp->regs->GBLCTL  = 0;       // Reset
' U3 m( m% S3 s! t5 ~2 ~    mcasp->regs->RGBLCTL = 0;       // Reset RX: O. s5 f# u6 a0 z4 A' w$ r4 O
    mcasp->regs->XGBLCTL = 0;       // Reset TX
" N0 B& @9 L% u    mcasp->regs->PWRDEMU = 1;       // Free-running
1 A: i( r' _0 `  |6 {- Z6 i   // configure McASP0 receive registers
* J2 m; _8 D/ N# c6 T7 g6 Z    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used: s6 \4 Z: G6 p
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 H/ J! S2 n3 [: d- x& O1 a" o    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word! N9 q' d! i6 W& ~3 Z% S& \
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)5 I. V# z9 g4 B3 s' z
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)1 k% R- q$ ~/ t+ k# ^4 @
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
$ b. v" U+ x9 u    mcasp->regs->RINTCTL    = 0x00000000; // Not used
" n4 t) f) Q+ p; H    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 h# F% R. A) u5 T2 @) m! J2 V

" t3 h1 v( T) S9 J    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used/ j$ x# ?# L3 P! g8 {+ q" X
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ \# r6 \" I3 [/ t/ ~( P
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
3 \: B& J9 w( B. d1 f' r; g    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
( V# H5 b4 j0 D/ w9 G0 p    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
) H1 i6 w, L: u. [% |+ p) J    mcasp->regs->XTDM       = 0x00000003; // Slots 0,12 n+ _" t3 o% e# M3 L) D1 o
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit" q& [  J6 C' J" G: Z
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: m. w9 ~6 X4 L$ u
: i. a/ |! }- B6 T    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN9 D) u6 b" R0 u
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
4 L  @% s9 c$ M- U    mcasp->regs->PFUNC      = 0;          // All MCASPs9 H7 k/ C0 _5 x# \' d
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
) t9 H' v; @5 I5 C, Y( ~# [; G" p2 K+ i' ?1 h+ O4 l' {$ {
    mcasp->regs->DITCTL     = 0x00000000; // Not used
, P; N0 Q& k, G( ?" I$ f5 N4 R    mcasp->regs->DLBCTL     = 0x00000000; // Not used4 h) V8 I; ?; {4 f* Q2 W" o) W
    mcasp->regs->AMUTE      = 0x00000000; // Not used
8 m' D# n% ^' @7 c
3 \$ s" q7 W4 b2 G) N' ]. n/* Starting sections of the McASP*/$ E" ?. c3 s0 Q
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
8 t- J% [6 G+ {2 i' L    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
0 p: d/ Z- q* S  J9 w, F' j    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;   z0 x% X' {" U* ^; O! G$ e! H8 e
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );3 T% U8 L  r; B" L& B1 C

- r: F, T# v$ J/ w! T. @- z    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
+ y: y( H$ C; G2 x  H- d# O6 k    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( n8 z. L' f7 U
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; - J" y" c0 N$ o) L2 G. M
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );4 g) |! E( }' ?; c

: d! N+ O( G1 T, j, _    mcasp->regs->XSTAT = 0x0000ffff;
' E) x& `0 _: n, [) M- M3 h    mcasp->regs->RSTAT = 0x0000ffff; 3 X9 }$ G) R3 w% ]- |* m
( O; ~0 {; F+ {. M9 W* N/ X
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- C: Y9 l% B& ~( G* |9 f5 \4 q+ ~    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );2 S; _0 O. R  s# |) s
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; , d0 u: ~- Q7 C+ O5 z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
# o9 q. k8 X5 f& E, C4 T
& M, Q/ J6 `) I1 U8 U5 w    /* Write a 0, so that no underrun occurs after releasing the state machine */" @# P: d# ]0 M7 t: V/ B3 B. k
    mcasp->regs->XBUF5 = 0;8 k7 ^. C, h# T+ k7 n
    mcasp->regs->RBUF0 = 0;
* ]8 g" E; N7 n( l3 ?/ z" ~3 m6 T1 P1 X0 I- @* z, z
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 2 N5 u/ V0 V# e6 l7 H  ~' c
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
5 I  J6 A1 y+ A* }    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
* a7 g0 r# W/ H3 V' l    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
& j! Z& v7 B' e6 O" B1 n5 n6 y
! ?6 H2 ^& C1 N/ T. }1 Y    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; : N5 G5 p# D* C; y' H
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
# O  U& y3 O) H  }1 e+ S1 T: J  a    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 0 N5 y: b5 z& }2 B2 ]5 y% G
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
4 P% c$ K/ K, O, W! {; Z0 y$ O% p" y9 s" B5 k) Q. D3 y
    CSR = 0x0000;, |% `+ v6 |& p5 W
    INTC_INTMUX1 = 0x3d;7 o0 y- x: B- v% v) C
    ISTP = (unsigned int)vectors;* r+ w! E/ I7 l' F% w6 Y4 X7 J* e7 C
    ICR = 0xFFF0;  
3 {. O$ I) _% H    IER |= 0x12;  
6 |/ j  o: A6 q/ @3 t    CSR |= 0x01;  - M. a/ }# z; o5 _+ o

* Z2 _4 U1 |4 ]2 q% ?% C
1 t" Y; p; z, \5 S, z& j8 x' q! O+ V" A5 ^7 B7 R& L
还有就是两个输入输出函数:
& a: |" C+ G5 o3 b: |/ ]void output_sample(Int32 out_data)
1 F6 P/ d2 O! M$ m0 l{+ }' h# ?  N6 [# ~* z
  AIC31_data.uint = out_data;  
6 |9 A/ E3 B& ]* A5 x  MCASP1_XBUF5_32BIT = AIC31_data.uint;
, R5 A' ]$ m& y0 @}
8 B; H; \, q5 w2 k" N: G, M5 `& c4 [; h, f7 D1 e
Int32 input_sample(void)1 C" L- N; U0 c% c. Z: H7 `( {2 m. w
{  6 p7 a8 a9 [7 g* }$ i3 T
  AIC31_data.uint = MCASP1_RBUF0_32BIT;/ K9 r% E% }$ M3 k% h. V6 P9 C
  return (AIC31_data.uint);" H  `* x2 P4 F  }0 z
}' A6 [: W" d9 [' M/ u

- ]5 n0 e) g; X1 s& A5 _. Y: q0 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, 2026-1-19 06:31 , Processed in 0.040200 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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