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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:4 F  _: ?0 ]; \, o. Q0 t+ `
main文件:& F  u! n8 p8 |& F" h
interrupt void interrupt4(void)  1 q+ s% L' Y) q" g
{
7 x! i' }' V+ _3 g  Uint32 sample;
( j' p8 {  ?# k6 `4 Z5 E+ L+ @$ e' b; S! m
  sample = input_sample(); // read L + R samples from ADC! u7 c  Y3 d/ u8 |+ J+ o0 F
  output_sample(sample);   // write L + R samples to DAC
# g. r$ I; G' ?8 ?7 ?  return;
% P( l1 A, y# S6 Y}1 \7 y! ~5 |# p5 V
, {, C* }( F! k' {& E, N4 A& q8 O
int main( void )8 }6 s/ p" Y6 B; y$ S6 P  O* `2 a3 k
{
" {# P- o6 t+ N3 {- ^: V: e0 q
    /* Initialize BSL */
8 o$ S& N* r) I2 x* W7 h    EVMC6747_init( );
  ?5 B0 m: I+ w# d& o8 m/ @        /* Call evmc6747_intr function */' K. Y/ q- r2 W$ @3 J+ f+ Z/ |
    aic3106_init( );" w; l4 k& T+ L- ~0 v. r. ^
        while(1);
  }9 y9 e" n" Q1 `" v9 D}, E* M  s. S5 z- `1 r$ `' ^8 \
( J4 I; `2 O( {6 W; M/ Y" G
* v( K5 m9 m* Z( M; u" J
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题( V# M" N) u: m/ o  D
/* Initialize MCASP1 */
  k7 X) X6 B, t    mcasp = &MCASP_MODULE_1;
/ F& x7 G$ J2 m7 ?    mcasp->regs->GBLCTL  = 0;       // Reset
* Y0 m/ K4 `! u3 s1 Y% Q" b    mcasp->regs->RGBLCTL = 0;       // Reset RX
% a- t* B9 E# N: v6 Z% u+ ]9 w    mcasp->regs->XGBLCTL = 0;       // Reset TX; D! Q( X: D7 z/ X6 b* @4 W+ |
    mcasp->regs->PWRDEMU = 1;       // Free-running( i2 X1 m1 J+ v
   // configure McASP0 receive registers9 C! h# u- {& ]" c) i+ D5 Q! _( n
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used: J- Y2 d& y0 _
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
/ T( G) X1 A& n+ Z6 l    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word: g+ a5 g  C; d+ _! `2 r# P; [- R0 `) ?
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side), }1 v/ q+ s" `9 y
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
- _- c8 f0 c0 `# K; T! D0 Y( {    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1; P8 e( h1 q+ }$ \
    mcasp->regs->RINTCTL    = 0x00000000; // Not used" }. n4 }, S/ l7 q
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256# Y9 q  C6 G. Y$ g5 Z0 r$ {

- e8 k) t- X. b7 E8 l: U- h" h& A    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
  X  Q5 u# U+ r- z& N    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* w* r, u- a8 i) O' [5 j/ E, }# T9 F
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word# O2 a$ N( g, f, v
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16! V3 d3 ]  L& p5 r+ k
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK! V; S, p; V' N: {7 Y8 k
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1( D# [5 H. K+ R- Q8 o9 U
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
$ _& x8 d! s8 w) @* \" Z+ i    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 d1 M6 P; L# p, w/ ?' x/ a
# Q7 e1 t7 }9 L) u$ S& z3 G
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN( {/ J; n3 P* C' |* V: d* o7 a
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
/ [! m- H  U2 e+ i) a    mcasp->regs->PFUNC      = 0;          // All MCASPs. z/ S9 l3 b7 F! g) r
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
8 z& R; P3 L1 \- w5 f" U1 i8 `* c7 g, Q$ i
    mcasp->regs->DITCTL     = 0x00000000; // Not used
7 y4 T* H" @, {" f4 d8 \& @4 v( ~# y& I  B    mcasp->regs->DLBCTL     = 0x00000000; // Not used
+ N3 X8 U8 j+ K7 l2 Y4 {    mcasp->regs->AMUTE      = 0x00000000; // Not used6 ~4 V6 N1 {: X. l* ?
: j8 ^' }# K  }; G- s  |  f+ U1 [
/* Starting sections of the McASP*/# ?9 ?( `3 }  _& a1 J% L7 @
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
- }& t& M, [" X- a) M    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
. M. [+ |! E+ e6 ^; s    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; & N# Z5 s8 G8 k. q' g: @& e  O' O2 N
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
8 o! s0 X* j4 K% x3 Q& @' M
8 v$ M# s( _9 G! c; `4 ^    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
$ e* O& ^5 f. q. I* _0 w    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );$ L: y/ P$ T6 O8 c- E
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 6 V$ M4 F9 b3 B2 l
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );  z5 l9 L- U; l5 q, I- j3 {

- G; ]. l; n& S    mcasp->regs->XSTAT = 0x0000ffff;
! e3 k; i4 @: T9 L    mcasp->regs->RSTAT = 0x0000ffff; 4 k1 D+ s+ v8 r1 v7 [; _3 J
8 O, g% A. w6 e  G& Y3 b& {
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
3 e  J9 }# f( [, q4 R: @( a$ a    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
3 c3 F6 T9 \8 R. L$ _; Z6 F& o    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
9 x$ a  w" X6 n/ R& ]8 @# D    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
1 T& G2 m: a) K) I5 I+ Q) Y
9 x( s% c/ {9 I2 Y; Q9 S& X7 _' d    /* Write a 0, so that no underrun occurs after releasing the state machine */( L. {9 G+ e8 @1 ^! l& @: N
    mcasp->regs->XBUF5 = 0;8 o: |& H9 _9 L! b) W0 t
    mcasp->regs->RBUF0 = 0;- b9 w7 e. D$ v$ E; {% P3 \

) Z* y: e8 T& L5 X7 p    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; + @1 E. ]/ e* n( c. u; k; [
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );; O' h2 x, q/ h: i
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
. c! s- R' C! g7 L/ F$ ^    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
- P2 ?* N8 F/ ^& \3 ~: C3 R7 A8 t
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; & d& }5 u7 D+ d* q4 ^$ {# z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
1 |: l# \+ d# X# O, i! J5 z/ m) A& D    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ; Y, x! v: r6 M6 n5 u* e
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
( {5 Q* e9 K% g9 B+ B5 B- W2 n, t; p& x# X* l
    CSR = 0x0000;5 d) U! s; _' ]) Z% E8 p
    INTC_INTMUX1 = 0x3d;+ ^$ g+ h3 S: T% K( z* p% _
    ISTP = (unsigned int)vectors;, Q' }! y/ S1 e' |  \
    ICR = 0xFFF0;  # [0 C& f6 [$ z8 t8 O
    IER |= 0x12;  
' `" M4 U8 r" v3 t! o  m  D" o- o    CSR |= 0x01;  # ?& R4 _- r2 h  v
% V  t) z  M- g/ n  v, w
1 r! q4 [8 ~5 j3 V

5 t# w4 B6 k8 ^! ^% F( O$ ~/ C: a还有就是两个输入输出函数:' i: U6 M( N7 q, i) f* d
void output_sample(Int32 out_data)
1 m. z$ l5 {7 I- o4 J{" I/ d- y' x" {
  AIC31_data.uint = out_data;  ) E$ f3 A0 F: k. M0 Y5 R
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
+ w5 M5 i; F/ d}) [8 a9 ~6 e  o9 d2 Y, w

6 h9 k, q, M: I$ Z; PInt32 input_sample(void)$ o9 ^+ L8 ^  b1 M
{  
+ n: e/ P2 V  f- D; n7 O% g  AIC31_data.uint = MCASP1_RBUF0_32BIT;
. V1 X. q& _5 s9 O( U: \  return (AIC31_data.uint);; o3 m( c! V  t* b3 D9 D' J- E/ u6 ?
}
1 @4 a) _0 S% K# P+ X% i
0 [2 c+ s$ }+ x: N9 |1 @; O' N8 }
分享到:  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-18 10:46 , Processed in 0.041837 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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