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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:  ~, u8 W; U# c, Y" K$ s2 m
main文件:
5 t: w% H. C7 [8 ^) pinterrupt void interrupt4(void)  ( A4 K, N- [, c& N& Q' P
{
& f9 x" ^  D) J  Uint32 sample;# Q1 a/ |& B6 c/ `  u

5 z( `* G4 n8 a8 |$ x& C! W  sample = input_sample(); // read L + R samples from ADC
8 R* C8 n: k: F# M0 G/ w  output_sample(sample);   // write L + R samples to DAC : K% {6 ]9 B+ o" |
  return;
9 e3 m5 N, F4 Z: q3 z  J' i/ z}- k- L  u( w' z( X2 ]$ ~
# {9 }7 u& E: H! a3 N
int main( void )
7 f( }6 U# Y3 `{
& d; F/ |( A; r" f$ E
: V+ i) L6 J0 T0 M    /* Initialize BSL */
2 o6 y3 l9 X6 j1 y) U& l+ `    EVMC6747_init( );
8 A7 P. H1 R- F$ p        /* Call evmc6747_intr function */
) s' e! B4 k6 x# i3 L$ \: E    aic3106_init( );" h1 q1 A4 H9 R) t: p% B! I
        while(1);4 e. ~, O+ y  h2 h# G* Z0 }
}1 T6 o# B7 ?+ o# B+ o
: b# b6 y& u+ b: B
# q# L1 y+ c* Y- z" ~3 X. [
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题" x3 ]- C" ?: K. q! }
/* Initialize MCASP1 */
/ t. i0 J+ s1 u! |7 U) F    mcasp = &MCASP_MODULE_1;
- A+ \% e' S3 w    mcasp->regs->GBLCTL  = 0;       // Reset, t; x& Q* L. N0 w5 \6 G
    mcasp->regs->RGBLCTL = 0;       // Reset RX2 O5 g2 P0 |& E# U: p$ I
    mcasp->regs->XGBLCTL = 0;       // Reset TX
' \' `* W. c. A- r5 h    mcasp->regs->PWRDEMU = 1;       // Free-running
$ P5 J$ o5 |# d& F   // configure McASP0 receive registers: h/ z9 [) j. I
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
1 m) r: _) f- |! j9 s    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
0 ~  T) P3 O2 U* j6 o& E  o( ^    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
3 Q9 E0 H7 {9 k) O( }# r& l    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
. b& [# ~! O$ ?/ q7 e, V2 _    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
! Y% t% a" @- `. h# `8 s    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
! u6 \0 L3 `. n    mcasp->regs->RINTCTL    = 0x00000000; // Not used) }* K6 y/ J6 m0 k1 D
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% Z2 ~2 L9 A$ ^+ A0 D& {$ I2 T
& s2 N  {/ V' k* B
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used( `$ Z' b* g7 V  w
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ S) M; T3 \6 S. x; O+ h0 B    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
* C; W$ m, ]# h2 ]' s    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16: z" m* O$ s, N' G6 S5 o
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
" p; R; C. _- R3 i9 y    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1' j% G9 a# F. c) r7 P
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
. A% l/ U* N0 i" t9 O8 D, i    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! k3 E5 a, g5 X7 c
" t+ ~. g6 i) D! Y9 V( A+ \    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
  z+ M: ]8 ?" T    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
/ W( C+ U. W$ R0 V" ?' L9 D    mcasp->regs->PFUNC      = 0;          // All MCASPs
& R% n& A5 J2 {. a0 k    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
# v3 e  ~& F6 o$ L: A: a" C7 g
4 j5 W: H1 f1 x    mcasp->regs->DITCTL     = 0x00000000; // Not used: X. g9 u, I( ]1 A9 P0 T6 B0 I3 \2 d
    mcasp->regs->DLBCTL     = 0x00000000; // Not used# `- g8 B4 X- J- z
    mcasp->regs->AMUTE      = 0x00000000; // Not used
! q2 D+ B) O, U, K
5 X3 M! _4 O; S$ i3 ?/* Starting sections of the McASP*/
' {  }3 J  F$ V9 V/ E( a5 o    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
4 b7 L+ F) t  ]3 z- G' J    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  + S# Q/ R; z2 ]+ O1 c" _4 s
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; * r. J7 |9 H- Z1 x
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );: X7 E$ w3 B: r2 Z

) ~, z% X. W" n1 T% j) t    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
) ?  g: `  S" G4 k% \    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
8 Z( f3 S" H: X4 k6 m1 _+ `    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
0 T) ~1 @6 M9 t) i    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
* K( D- u6 b0 a, `& I! d! u, l6 |6 S# h0 w, G$ D+ D1 _7 ?' ^( M
    mcasp->regs->XSTAT = 0x0000ffff; + q. T) h; U- N. t& I& g. {! t
    mcasp->regs->RSTAT = 0x0000ffff;
) q) m) V9 v1 ]8 i/ I, g. x' ?& {6 u& G) ^/ }6 W
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
" y, k( B- J2 L    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );) T+ ?  r& a& A! s5 I8 ?
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
* ~+ C* p& j& b4 {  K- l. L    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );+ t# ~0 ~/ p" l+ W

- ?% p+ e: w: N) U: q    /* Write a 0, so that no underrun occurs after releasing the state machine */
$ N7 k* X7 n& a+ e    mcasp->regs->XBUF5 = 0;+ s$ i" H+ C  {
    mcasp->regs->RBUF0 = 0;
2 }' w/ N5 A* q* z5 `% f, Z& O) d7 r
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ) z% W* |9 E( ^4 v& Y* ?" q/ z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );$ I, ~) N# A0 u- o  \2 y
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
( `/ K# u% o8 O    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );( Q0 m5 N  J" ~- r, g5 R- h
+ U% d) P+ I  B( b) L* O6 k6 k! G
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;   a, l/ @: m6 m" ]% Q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );4 W, w& t, q  |8 d2 E
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
/ l1 b3 \& ~9 p    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
8 G$ D$ [4 O, @3 L) a* ?% K1 y  v; `* U# b/ G! q9 _  L5 T
    CSR = 0x0000;
- I- Q" `; y& {    INTC_INTMUX1 = 0x3d;% k/ s" d, B9 k7 u1 u! q/ d
    ISTP = (unsigned int)vectors;: x# f+ _3 X8 P5 x' o
    ICR = 0xFFF0;  
: Z0 e& a& @. v7 @$ Y5 _    IER |= 0x12;  
, W$ J6 l% P4 M) w( S6 Z    CSR |= 0x01;  
) N$ ?2 @6 a- w7 g& Y2 @& l* ^6 E) Z5 P2 q- p3 {
5 E, v# A" K) l) k2 k
% j9 \' ~- V- b4 K/ p
还有就是两个输入输出函数:3 L8 n, w  D/ h0 S
void output_sample(Int32 out_data)
: q  R+ a7 `9 ?' @! Y{
! ^- G! `* @6 |2 I  AIC31_data.uint = out_data;  - J/ ?# X3 F3 z0 k4 @5 f1 C! t. m
  MCASP1_XBUF5_32BIT = AIC31_data.uint;8 t4 m  _. \1 m* o+ `
}
* X! ^- j! h$ H; K! K9 N0 n2 \8 _: L% m
Int32 input_sample(void)/ C# P( }6 }9 E8 P% r: X
{  5 |0 Z7 b2 Q0 K5 A8 y
  AIC31_data.uint = MCASP1_RBUF0_32BIT;* o- y# i" s) P% z' r: q" u+ L9 |. Z
  return (AIC31_data.uint);
/ ?* S5 S  [! L5 @}6 ^8 @; f, ]& g5 F
* ]: w" a5 e" j+ [* L4 K$ l, |. u
分享到:  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-26 03:58 , Processed in 0.044736 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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