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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
+ `, u" v* F7 g! hmain文件:% P; x6 {, u6 z7 Y3 y6 ]
interrupt void interrupt4(void)  1 ?0 Z1 N: I$ o; [
{
1 u: L6 K8 |6 I* J0 O8 q  Uint32 sample;4 o( k0 M' @  ~& v" W* p2 g
. o. p6 b* Q' ?  o
  sample = input_sample(); // read L + R samples from ADC
3 Z) z/ H7 D+ F, d, }  output_sample(sample);   // write L + R samples to DAC 2 L- R7 q$ e( R& n! i4 z, c, u/ D
  return;
/ R) p- K% @+ w; }3 {}! O3 Q3 z; ?/ f/ m% \; m
( q- x9 p/ E8 }" ~
int main( void )
. o# I" r! |# u  X: L{7 R: h4 G2 I/ Q& h5 ^. N
/ D8 m  E/ Q: m: x* Y7 b% c- q
    /* Initialize BSL */
  Q( w/ O  y( u, o# A/ `    EVMC6747_init( );- J9 r9 a' L8 e2 Y9 m2 F) B4 F7 |
        /* Call evmc6747_intr function */4 i' y* b3 @9 s0 e; g
    aic3106_init( );
/ Z+ z- A% q; B; Y, x% `# e3 ]        while(1);
% c9 q1 |6 X- V}
% ?3 \: \* k$ G$ \6 r- l# u+ `# n' G' _$ x

8 T/ c" x; I6 z/ Y8 Y- {! C6 C5 Vaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题' C9 n$ F5 D" d9 e- r
/* Initialize MCASP1 */0 \+ |- \" }/ _* x) g& Y9 R9 j) d3 p% Q8 b
    mcasp = &MCASP_MODULE_1;* c1 V2 M7 J) `1 v5 _& d! ^7 ?/ m
    mcasp->regs->GBLCTL  = 0;       // Reset
: w* q! d% E2 M8 g% K& L& w    mcasp->regs->RGBLCTL = 0;       // Reset RX  t7 n* \6 [3 G2 ~; v
    mcasp->regs->XGBLCTL = 0;       // Reset TX
) `) [  U  b$ J) O# L- d7 V! y    mcasp->regs->PWRDEMU = 1;       // Free-running
& i4 ^" l/ G, s4 a9 J- X0 t   // configure McASP0 receive registers1 k* g5 r' {1 e& D, I, ^
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
' |+ z6 u% r  [    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ {4 T; v2 u  D* o4 B1 d! F
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
$ V8 d# ~0 I; n; Z9 u0 g! M3 R    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
% K# e2 ?% H: [  G: ~$ n0 I    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)* Y+ H4 m: X. ]# y& c( a9 m$ G
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
6 |5 M4 B* c, D0 F% |; H8 h    mcasp->regs->RINTCTL    = 0x00000000; // Not used
2 T& F0 F$ g- @% ~7 N0 _    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256) i" r" @! S$ _' j
: R9 L: H2 E+ J/ Q, k/ D  ~7 a. e
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
& r# ]5 v$ O/ }6 o- O6 r    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 r  B0 ]  M( a3 P" A+ {  E    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word2 ^3 s& Z/ j% b7 _) ]. I. V
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-168 G; d* D2 y; T" j# O* y, D
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK% D" `) G: `% l* Z$ ^1 g8 d/ u4 m
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1& ~* _" P4 A- N0 j
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit. X8 M& ^1 A& c3 m4 u
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" ]4 G& P( j  H0 I2 Z# [' t
6 V2 P1 J& r  f0 e' ]& n: ?
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN# v2 D/ \& p" T0 V6 i) J
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT$ W' {- f! l8 J
    mcasp->regs->PFUNC      = 0;          // All MCASPs0 M! x2 C2 w3 j2 S  P% b5 P
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1' N+ T* I, g9 V
( w9 o3 N0 i+ B6 [9 h6 b
    mcasp->regs->DITCTL     = 0x00000000; // Not used
6 H7 b6 I1 w; Y9 J8 G! \; v( M    mcasp->regs->DLBCTL     = 0x00000000; // Not used2 \, h4 o3 M: k$ t% N
    mcasp->regs->AMUTE      = 0x00000000; // Not used& j: n3 F3 V; _$ h4 f" f

2 v" B+ H7 o7 F- @5 F4 y/* Starting sections of the McASP*/
3 [; ^& V* G- I* m- p/ g- h    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; % ]) F, L) X5 R4 d, R! l
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  % M2 R' I7 j/ J9 B
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 7 X" M. E+ R: K) F& v# F& j$ m+ \/ G
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );3 p9 {6 Q8 }1 H. ]; p
% o( j' v6 e0 f9 [2 M
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; & ?' l! J5 m) s' Y& }: r2 \+ c
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
7 W/ `' T5 Q5 y    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
, M5 `0 n( N4 V, w$ b. E    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );1 `* W7 u$ K% Z0 b

4 D7 w" T5 c0 ]    mcasp->regs->XSTAT = 0x0000ffff; # `8 j' R% e+ v
    mcasp->regs->RSTAT = 0x0000ffff;
+ S3 Z) j: G/ d  S3 ?
' H6 c& d- A3 ]. u6 z8 h6 V6 a    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, j0 Z# ^4 f" r4 G7 ^    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
6 A0 X( l& ~" `" Y  E# [    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
5 E# s* b6 z) J& u* {2 [8 g    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
4 Y  \8 z  W  J7 s3 B2 R# i. ~+ G1 V8 w# \6 a
    /* Write a 0, so that no underrun occurs after releasing the state machine */6 s7 k7 b+ c! M( P' c
    mcasp->regs->XBUF5 = 0;( v' z6 _5 i# M; L7 m, D
    mcasp->regs->RBUF0 = 0;
/ l  L( L& j. J! ^4 Q8 E+ c# p- s, z: `# L  v
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
$ ^/ j$ K3 I9 A7 }    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );9 H6 M* d; V! v# L
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 4 S. h% L. V# O; |
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );3 A) v* r9 F- b5 M
  a  a6 N3 ?9 }
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
5 Q: E& I# h$ C) R3 L    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
$ e% r; B- D5 m7 C  X. h    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 6 N& G3 V; P) V( \5 n1 N3 o
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );6 n; a3 L: n1 S
; M% a' X9 y7 X, N
    CSR = 0x0000;9 ~5 Z' r3 K( Q0 m. j6 r) I
    INTC_INTMUX1 = 0x3d;" k3 I$ H8 n( n
    ISTP = (unsigned int)vectors;" f5 C/ \3 b; G
    ICR = 0xFFF0;  # P8 K4 r  h1 w% g# \9 n4 ?2 c6 z
    IER |= 0x12;  % ~; A6 |( X5 @5 Y- ~. Q
    CSR |= 0x01;  , X* y: Y- R3 ^! i7 L$ @6 b' _+ d
# j6 T( t) D' J- R& R' T* O& C  V

# I) D* p2 S: g  {. F# G
* i. ~. Z& I" v6 o9 ?  i还有就是两个输入输出函数:2 p5 a0 W. C9 T- p2 N' {
void output_sample(Int32 out_data). b0 L( T, ?( s& Y. V/ x" B3 V
{: }- q% ^. H$ F
  AIC31_data.uint = out_data;  
: P  J) |3 r- f; A- @/ m  MCASP1_XBUF5_32BIT = AIC31_data.uint;
9 p" t6 R) H) a, W% a& v}& h' i% z0 w1 N3 k. Z% \

8 j2 W; m$ N  u1 zInt32 input_sample(void)1 X. V+ s2 Y! z) Q7 T
{  
( N9 G1 J3 h! f; r  AIC31_data.uint = MCASP1_RBUF0_32BIT;
, m7 W4 [* V1 u/ y  return (AIC31_data.uint);
, m2 {* x! @& v. M* e. n" u# J}
8 B! d# _; v& t+ c4 q! S' }; [0 C! a! v$ \7 f& u, ?% y  |4 p6 `
分享到:  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-4-7 09:16 , Processed in 0.041487 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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