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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:6 S8 R  U. D( K; ~1 B
main文件:+ W+ y  \; E5 [
interrupt void interrupt4(void)  9 M" m- M: u$ C9 ^  m! E* [
{
+ ^2 B; j4 Q) [  Uint32 sample;8 Y+ H, v  w- \
$ v4 ~" h- O' v4 P: j& v* k
  sample = input_sample(); // read L + R samples from ADC& v  n" x, W3 ]4 H
  output_sample(sample);   // write L + R samples to DAC ) g, `1 @$ X0 R7 A" q) S
  return;( c0 _4 r  q* L% i5 r/ w" n4 h8 }
}
0 T( n+ |1 p( v: C6 y
* g8 y% O3 ~+ |/ n& Q# R; cint main( void ): m" }; v6 ?8 f! G, k
{
9 V) w+ }* ?; |) x8 m  u/ u9 Z5 E5 K8 q+ J1 i
    /* Initialize BSL */$ F& V7 K0 N1 B" G* B: T
    EVMC6747_init( );
7 R$ R* B5 K& \4 `6 l, e+ M( R8 Y        /* Call evmc6747_intr function */+ Q6 y8 z7 \# t7 i7 l
    aic3106_init( );
6 o: r( j6 Y  G' t6 V        while(1);1 Y  i9 _2 x2 _# J& e0 R
}
$ ?; T0 Q8 E8 P
& K0 }- X! G' O0 a; H1 U4 c* k2 e. g
3 O3 F4 I5 X- U" d3 eaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题7 [  R2 X5 o$ o  }& t  ?
/* Initialize MCASP1 */2 \' T6 C$ u( ]' q8 @) a1 b0 b0 w6 ?  \
    mcasp = &MCASP_MODULE_1;
6 ]6 G# s/ [. _7 V    mcasp->regs->GBLCTL  = 0;       // Reset6 l. g/ P5 U& d( S# G
    mcasp->regs->RGBLCTL = 0;       // Reset RX
" b6 M$ e3 j8 Q' F( i$ H    mcasp->regs->XGBLCTL = 0;       // Reset TX
/ E* v0 d. y. p* |, f    mcasp->regs->PWRDEMU = 1;       // Free-running
9 q* F0 ?* r6 I, y& Y3 y! P6 ?$ F# o   // configure McASP0 receive registers( g3 U. j/ X! v/ d  w; _
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used9 t) q% P! x* T5 Q  s' ]
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 G! v/ A0 @% s) j7 _" ~& U
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word) m) w4 x# d6 L' j8 b, \% L; v  ]
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)  m6 D: d& X) ^# ~0 y- ^
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
8 x6 T, b; k; y: l; @7 f    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1& J9 Q2 T- V$ q- b# z9 @8 b  @
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
. R9 I* t1 z+ N0 J* G  [% I: `    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 j" Z- |3 b0 [$ F* R/ }7 w- n4 O2 Q9 d* N. O
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
+ |7 M# B2 b% v$ ]& J    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* i+ c" J9 V" F8 ^
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word. N* Q* v# y7 ~. L
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16, c( j4 `) b. V
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK! j) V9 J; j8 ~' A' T
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1$ y8 Q  y4 r5 q  D+ \9 a" D
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
. M% ]8 F. o% a" p5 x5 R    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256. P. a5 s4 h; K: B

- P/ `' y. p  C, |! `    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN" ~/ \) C4 K" z& N
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
9 O9 s- F: K5 U3 c" {4 j    mcasp->regs->PFUNC      = 0;          // All MCASPs
  O1 x1 M/ ?% m    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX17 a: Z2 v) g, {! H! T
- R2 M0 p7 @' {+ D4 S5 b1 s! C
    mcasp->regs->DITCTL     = 0x00000000; // Not used/ m8 C5 g' K$ [8 `6 n/ ^( j8 K
    mcasp->regs->DLBCTL     = 0x00000000; // Not used! M9 u+ l1 c4 E2 ~' F- J* f! w
    mcasp->regs->AMUTE      = 0x00000000; // Not used
1 I2 l# v) |" q3 Q" v: x+ \& e5 n' w- _, K
/* Starting sections of the McASP*/5 y/ p- A0 e% S2 _+ Y5 q% ~( K
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
* ], f+ F' V2 v) a0 a% \    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  2 _& m$ F0 w9 H1 e' Q
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
, X2 B6 |6 |+ q. p5 G$ ]    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
5 h9 _  V4 H3 p
3 t- V7 e; Q, X/ `4 A    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
. u: u  c5 K0 b+ G1 o    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
( J7 a& Q# D, Z0 h    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 2 G0 V0 \  i6 R
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );  s$ z( ?! A; R2 f

+ [' |7 O# v7 Z8 W! c8 E    mcasp->regs->XSTAT = 0x0000ffff;
! L% h9 s; V% F) i- x    mcasp->regs->RSTAT = 0x0000ffff;
+ ~- ^7 R9 B& r' l; O8 W& ^% l, J! W5 I
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
5 P0 U8 }" c9 h/ f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );* ?9 O$ _2 C* m) C% h
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; % M8 G( X1 {; F
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
! f+ R9 L& r) p) r% u
' d. Q6 K0 T2 P0 n    /* Write a 0, so that no underrun occurs after releasing the state machine */
( \: P7 ~4 z( |' m    mcasp->regs->XBUF5 = 0;! ?; j9 L3 z' C; M/ a# p* Y' h
    mcasp->regs->RBUF0 = 0;0 ^! l* N; ?/ U8 k  y" M3 D+ p

5 O( t$ Y( S/ W0 |/ c    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
- x: h( a5 Q" a; w4 h    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );7 x# Y( B; Y( z  P* @; t' p
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
' e3 {4 T3 @9 i. N* b& [1 l    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );7 z1 C; Z& ?& m8 z& T8 @0 Y; \

3 ^! j0 R6 e# T* z8 v3 a& E$ Q8 D3 s! S    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
. V% ~% z4 z1 q9 r! A    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
3 ?' h) V9 q( {! r    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
8 }- B) ]+ C6 _, F3 H    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );( C3 l8 e$ i6 [% \& O7 u, f
! q8 h' F, ]5 H6 c
    CSR = 0x0000;; k# o: v! P' l$ [9 K8 G
    INTC_INTMUX1 = 0x3d;
$ X- V. m( S$ A9 N    ISTP = (unsigned int)vectors;2 F5 f' q2 n+ Q! Y9 {
    ICR = 0xFFF0;  , F) C- w& a( ^5 k% S+ @/ j' ~
    IER |= 0x12;  
9 Z9 C5 D1 T( \4 ?* p    CSR |= 0x01;  
( V1 r- @5 y- v" Q
/ A; W% w" W# w7 B8 t( l0 o2 |7 W5 R  Y" t

6 N: j$ n* x1 {6 H+ H4 U还有就是两个输入输出函数:
6 r6 U" T  @( b' p! a8 Y4 Avoid output_sample(Int32 out_data)- {2 I5 @- _* k4 N9 z, N# V9 i+ }
{
4 h' b" D- k1 z  AIC31_data.uint = out_data;  
+ g8 q* k7 R: Y' S" ?' q2 e  MCASP1_XBUF5_32BIT = AIC31_data.uint;3 d) V' k, t% l% N
}7 P! D3 N7 A' t2 ?3 M4 _
- }0 K( P# e* {5 {, i
Int32 input_sample(void)3 s7 i! a, P, E( L* r; n
{  
% [) R" @4 Y( x5 |  AIC31_data.uint = MCASP1_RBUF0_32BIT;
+ D- Y2 l8 Z& h2 T2 R  return (AIC31_data.uint);
8 c7 H6 k8 q3 k8 S}
: @5 k  ~5 s2 Q4 W/ p3 O
8 [8 E  X+ S$ G6 p1 {8 J% j
分享到:  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-23 11:19 , Processed in 0.041952 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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