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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
9 z7 s& |8 V/ D" Q& ?: Fmain文件:$ t3 J2 {7 h- V- X
interrupt void interrupt4(void)  
$ O2 c$ |7 c/ g' l( {{: o2 X0 i6 S, h5 L0 v, V' }+ L! o
  Uint32 sample;, ?1 j, r- y6 Z8 v- S# {( [& X

7 L/ a7 G! z& |1 [, [6 C9 I( b  sample = input_sample(); // read L + R samples from ADC/ E7 I2 Y+ U) s" h) _
  output_sample(sample);   // write L + R samples to DAC
: {3 d9 l9 P+ J! b  return;% z. N6 m# r( n! _' D; W9 |" H
}0 Y& l4 E- i6 N# v

1 @7 P) a3 ^! G  l  Gint main( void )
! J  K1 o1 n2 c- p+ f7 Q2 o{
! o* I, F5 ?3 ^; b. r3 P) J* e" ~+ p: g, a
    /* Initialize BSL */. j. `4 J7 ~5 A7 J! H9 I: [
    EVMC6747_init( );$ [% B# e  s! a
        /* Call evmc6747_intr function */" Q+ R, W. T' d" E# U" [4 p
    aic3106_init( );& l! Z0 M7 X7 W, Z. u5 F% }% H
        while(1);
9 B& D: i& S" Q/ v  K}
  d1 H% o9 t6 C# P$ [
- Y6 [) c- ~+ n4 ~
. ]9 x; l$ e$ \( Aaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题" ^: {# w1 M) ]. L8 w6 ~
/* Initialize MCASP1 */
  M4 T: {7 k. M% ]9 Y    mcasp = &MCASP_MODULE_1;: e' j! O2 A; N
    mcasp->regs->GBLCTL  = 0;       // Reset3 ?; D  D5 p6 ?9 L5 L
    mcasp->regs->RGBLCTL = 0;       // Reset RX0 d$ O' b3 M1 y8 x
    mcasp->regs->XGBLCTL = 0;       // Reset TX
: P: {2 e6 u9 s3 c, j9 O$ C- ~    mcasp->regs->PWRDEMU = 1;       // Free-running
: @" J7 M4 h4 ~. a* v% A0 r) h   // configure McASP0 receive registers4 O+ ^# X' c. @% K/ d
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used6 C, u* X: G! g& j
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 u4 H) K3 k% R/ S$ a
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word- j) K! v. ^0 o; p
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
6 U: Z. T9 L8 N: N$ S3 a! l* b    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
' N- I1 T) z  S* Y; ]1 v5 n$ [    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
6 a# Q6 @" N' T    mcasp->regs->RINTCTL    = 0x00000000; // Not used
5 y% h5 p; f8 f# Y3 C! K( Q( H+ ]    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& J  m; u. |- Z9 e7 J% X

+ V3 r- I% l9 o8 m" x, r4 j    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
# T$ }$ `: F" Z0 d0 u    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 t6 z% u* C1 l
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word& g: f  \" o& x6 X, }
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
2 w: I4 p- P2 R+ G  A& V    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK& R* M, e. g' B( Z' l' g6 i
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
4 V# E& ]3 h% y    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
/ u: x/ r2 E" T% B" _$ e    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& l, a1 b+ f1 T" |4 c

1 O  u" v6 H0 e    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN  N5 B& e# `  U4 g
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT. @, l, e( @4 @* e
    mcasp->regs->PFUNC      = 0;          // All MCASPs0 J" z, u$ ?8 s& g* l9 e; g
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1: C7 u1 u) n% j7 S3 S# Q1 t7 P

1 }5 I" j# j$ G  w8 H) E    mcasp->regs->DITCTL     = 0x00000000; // Not used
  ^, }; U6 `, _* V- X' O9 U1 }  A    mcasp->regs->DLBCTL     = 0x00000000; // Not used
! H, x7 t6 f8 B1 b8 }0 Q    mcasp->regs->AMUTE      = 0x00000000; // Not used% q) L( O% ^& X; {2 g! U
$ y9 v  B- O& {6 r$ r8 k/ ^
/* Starting sections of the McASP*/
: r2 G% ?$ D% L7 \    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
9 t. O! c9 m; P* z+ z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
0 s2 C! S% w9 F- u4 E    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
* L* n! R6 B8 @0 o. @    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
9 D( {) g8 D/ s1 X0 h" F$ g. F& i$ L& t% @. H3 J( Z8 u
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; - [' Y  b6 D7 `4 R" e1 y; Z# g
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
, b2 @! `" I" p6 K    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 5 l! k4 c/ Z* ?/ }$ p
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
9 a5 j8 R5 h4 g+ c4 }
" s; j' G; J0 J' k    mcasp->regs->XSTAT = 0x0000ffff; " n; _. i# o6 X/ n7 o5 P. Z4 _* Y
    mcasp->regs->RSTAT = 0x0000ffff; + @9 u- K9 @) J( o

# d/ a4 p2 m$ H    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;; q" O% K' W0 t8 s& i' J
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
& w8 n) f# t' a! |, ?7 b    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
2 q3 f. D3 Q  ^7 U7 j/ @4 x+ `    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
$ f' E* e- X* T* d! z) G( Z- S* g  ?; n5 o
    /* Write a 0, so that no underrun occurs after releasing the state machine */8 k" G$ H. b. Y! Q! Y7 u
    mcasp->regs->XBUF5 = 0;6 j- N8 w+ e* ^3 ?9 ^/ a# r
    mcasp->regs->RBUF0 = 0;$ s7 E' U$ Z) ^! G5 r/ J

" M5 t' I* u) _$ j7 O& h0 J+ a    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; % ^- j, `) X+ E' |, y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );" Q! D6 ^- J/ k$ [0 B0 X/ f
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; & K2 r& i, V' z6 f0 X: u- g
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );0 o' q3 {+ h/ _
% ^6 @) i5 F* ?" V
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; % h* J* ?2 v! @- Y& Q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );( @6 ]' E, I" _9 d6 s, a
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 5 N. y$ E6 \. D; ~
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
) S, q+ O" s- _! q* G' V' H, ]7 q1 _$ u, H3 u
    CSR = 0x0000;8 d1 H( h& B$ n% R/ A! o' h8 L
    INTC_INTMUX1 = 0x3d;
, q5 s1 v, v8 S# V) w    ISTP = (unsigned int)vectors;
- Y: z1 I2 }) _6 g5 E+ N+ P    ICR = 0xFFF0;  
0 u& {- E! E$ @; l    IER |= 0x12;  
/ F* a$ Z' V4 H7 k: {    CSR |= 0x01;  $ h7 o* U. \0 a
5 F: ^  u- ~! z3 ]
/ t+ s" Z& o. N! z! Q
& K: P" C$ C# A! Y% _- F" q- k2 F
还有就是两个输入输出函数:% d" T% j0 J2 m7 g
void output_sample(Int32 out_data)
7 ~9 j. p6 T! [0 ~{
, }2 Y0 Z6 `, b+ \5 d  AIC31_data.uint = out_data;  
( b& [5 U- h& u, {, h  MCASP1_XBUF5_32BIT = AIC31_data.uint;, k! }" h* O% D3 s7 c3 m* s! b
}
# m* ~9 V- [# L! @. X# v/ S9 a0 U9 I# a5 T
0 e$ o6 r; E& B# v% ?; H2 |Int32 input_sample(void)& H0 i3 j; T" G1 o* a( Z, O
{  
8 {& ~8 s2 M' I+ q  AIC31_data.uint = MCASP1_RBUF0_32BIT;
- Z" ?/ |0 O- F% T6 @8 m  return (AIC31_data.uint);
: J6 J# L4 _: M2 h! W}8 [9 Z  {2 f: m# M' }! j( ]
0 q: s  G1 ~  t" p) C/ n
分享到:  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-28 11:32 , Processed in 0.039111 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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