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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
! p$ ~: P# I6 k0 g! Lmain文件:
0 q0 t9 X" t: B7 `/ Q+ U8 Ointerrupt void interrupt4(void)  8 ~$ s) P% c; x% Q4 }
{
$ b7 E- ~; ?* J! p9 Z; R6 Q  Uint32 sample;
' r( [+ Q0 m& x; p
+ b- }! [2 h  m4 {$ P$ G  sample = input_sample(); // read L + R samples from ADC
* f2 ]- d! j' _3 }1 j( C  output_sample(sample);   // write L + R samples to DAC
! R: X# {+ ~+ ^5 f, k0 q  return;) K8 t$ p+ I4 q& y4 l
}
$ @" Q# v+ v9 M" X* S
# K' o. [0 J& _3 L* `int main( void ), [4 `( {9 s, g! }
{: G; n6 {5 D1 R$ V8 r

9 h$ p) ?. [$ q6 Z8 m    /* Initialize BSL */
+ N. ?0 Y8 `7 E3 T6 z  j    EVMC6747_init( );5 Y; ]. p9 n4 b
        /* Call evmc6747_intr function */) t8 Q1 l" L3 ~; K/ ?  k2 Q
    aic3106_init( );" G5 T6 C( @! Y! L( A& U; v
        while(1);
2 c( ?5 D, a# H, \* }% E}+ n/ u% U% V! y0 R4 E
' h! U2 m0 {+ s+ B0 |! A

3 d# A) d5 c) W' Q# Eaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题( ]- c  ]& ~, ?8 s4 C6 R
/* Initialize MCASP1 */
  B( Q9 j9 R4 t' V2 }' m2 F& B    mcasp = &MCASP_MODULE_1;
- }8 Q  E7 S3 i) ^$ v- X    mcasp->regs->GBLCTL  = 0;       // Reset
! O0 U; u2 @( U7 O1 V6 O. a* R    mcasp->regs->RGBLCTL = 0;       // Reset RX
$ r9 P' `% g! {; p8 e. _, E) ]    mcasp->regs->XGBLCTL = 0;       // Reset TX
! Z- M% o. Z! ^    mcasp->regs->PWRDEMU = 1;       // Free-running
2 [) c8 Q  B( I4 }( U% R9 o   // configure McASP0 receive registers0 G) `3 A  T+ f, N8 `- O7 t$ _* S4 l
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
, C! q9 @( h. }- S* ?/ Y    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 H* P! N2 V- A: O2 m    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word! p* b) m" L' q& x4 F6 V& ]' O
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
+ h3 Q& |- m7 H+ ]    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)& P6 z8 q& Y+ k
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
2 U2 f4 S% D! Y! S- @' v: E$ g    mcasp->regs->RINTCTL    = 0x00000000; // Not used
5 t8 `1 H; m5 F' y$ c    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' {% F2 F4 w( i. y/ S: B8 e, a  Q

) w3 Y. j$ X5 g$ z6 A% ?    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used( a" v1 i, p: E' A( `5 b
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- V, k5 d  e9 ]    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
6 e4 W' o. S1 Q/ i& p; e    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
4 s/ i5 W  B8 P* l% W, z    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK! N- U1 A# Y- R' L
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
! r+ r. X* @) W# _) u    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit+ C" H& S- a2 l" I; X+ k" U
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% y& o& c2 o) u  M; C. }- n7 v) t' D/ B% X& ]0 S& `" Y
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN+ a( o2 ~4 `  m6 t5 O
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT# x: p, L7 h5 }9 d) _% l" u
    mcasp->regs->PFUNC      = 0;          // All MCASPs
4 j) _- }. q! ~2 S( e0 R    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1& k  d' i- d. f- V- |3 J

; P4 F8 ]6 y- R    mcasp->regs->DITCTL     = 0x00000000; // Not used" z) V) w( O5 F3 c* Q: H/ L
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
/ x- ]* a0 b$ ^7 \! D# l( X    mcasp->regs->AMUTE      = 0x00000000; // Not used" {. Z' j6 e! e7 W, j7 ?

7 ^6 D  ]% j2 A9 _6 M  R  ~! o: ]/* Starting sections of the McASP*/
0 g  w' X- I5 _4 ]$ y) N    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ' R* Q$ Q. a. Z' `) r
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  $ ?7 U6 B/ J* X, L& O
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ! z1 H% `5 g$ N7 D* x
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );+ e: J4 ]" [' J; A% q' r" V7 Q

+ o: r* R! n- B( F    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
) y# \( s# y: F- u4 t    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );5 U1 B3 p. e8 P2 X) c
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ( \! u4 z) M+ S. Y$ ]- T" S% T/ y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );& f4 m& c" T8 M
/ @: \( \4 t  y' G
    mcasp->regs->XSTAT = 0x0000ffff; 4 E* ~/ t5 c' P! Z  {9 l) ~5 i
    mcasp->regs->RSTAT = 0x0000ffff; # `. C# U$ L- w5 C

: Z# d8 W6 \2 X% y/ B) m    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;  b" a4 H, c  u$ [" m
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );: X: E) _1 F. }4 U4 R, b- U
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; / v! p0 z+ o4 D5 x9 \# b
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
4 s6 U, h: @4 ?' \& U( @1 i. d
' n# O1 c9 y. R6 f3 ^$ ^( |$ J    /* Write a 0, so that no underrun occurs after releasing the state machine */. d7 O: L+ i  h9 o0 G2 d- l- e
    mcasp->regs->XBUF5 = 0;* d! B( Y9 d, X5 ~. ?% V
    mcasp->regs->RBUF0 = 0;
3 |1 \; |8 c, @5 X: T: O! J: \7 M& Y, R+ Z# D( ^& r* A
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ! W8 Z/ [* m6 ?6 P; r; o
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
8 h8 _9 X( D5 N. D. s    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
# [: w: n: r' `  G4 I    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
. X* m6 ~* P6 P) ^( Y& R# Z; ~1 Q( |3 _3 u1 {; }- c
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
8 f% g, {/ d3 @5 S9 K    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );$ N8 l4 {. J* I9 S
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 8 n. Q6 e0 `) E0 I7 M$ P2 X
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
2 p: |6 A9 F3 o$ j. E+ L, r) g$ c& h. ~& o, a
    CSR = 0x0000;
$ f- ?* o" g! S    INTC_INTMUX1 = 0x3d;
% {1 _8 h' j( |/ T3 P    ISTP = (unsigned int)vectors;) e1 S  A8 U: C
    ICR = 0xFFF0;  6 P+ @5 `8 J7 u. j* B  x9 G" G5 m
    IER |= 0x12;  
% r1 X; a3 p5 O    CSR |= 0x01;  
4 Y8 v* s, e# o
5 W6 T1 C# N9 u% [: n
8 s( G  J- A' N- O
% O. Z  c% R0 z8 Y1 @7 _还有就是两个输入输出函数:
/ ]- L; V, c4 n2 Z# bvoid output_sample(Int32 out_data)
# l4 X! m8 |* a1 j( A+ c{
2 ^* Q2 z, W7 C8 R  C0 B  AIC31_data.uint = out_data;  
/ C5 [+ r) h9 [$ L& ]$ A  MCASP1_XBUF5_32BIT = AIC31_data.uint;
+ K. Z* m! B. c}3 y! [6 k4 r9 @2 @5 c

3 X7 G8 [& F5 S3 F  Z. F* hInt32 input_sample(void)/ R; L& ]! ^" e0 J/ k; c
{  0 n0 A% @2 w* r1 v# D
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
* T6 j4 j* T9 B  return (AIC31_data.uint);
$ l6 _9 c( T' ^}
, D% I8 [8 H- T: z
. D3 f  E) j# a/ @( g
分享到:  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-19 18:37 , Processed in 0.047412 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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