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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:# N/ F  N2 K# W" N* Z  C
main文件:, b) G0 Z4 Q* K2 g
interrupt void interrupt4(void)  ( o9 v6 b- P, A1 k
{
' L5 B5 X- h' N  Uint32 sample;
+ U: s$ u1 I5 x/ @8 L1 {6 o# q1 x! u, G( [+ r
  sample = input_sample(); // read L + R samples from ADC, i+ n' W9 G' Z( W5 Y9 v8 x  Q/ I
  output_sample(sample);   // write L + R samples to DAC & D' J8 v! S& Q& x/ l
  return;* p- t! Q. b1 Z: u1 `
}* Q8 ~' D; C' B8 ]6 A0 P" r' r2 z

1 A) m8 ~) w! O: W" ^* cint main( void )8 H) X; Q: U5 J  Y7 _! m, p
{
" c, c. X9 |5 `: U2 f* N& D# b! S% @: q- T. e5 v6 Q, k' F
    /* Initialize BSL */
- h7 E$ v8 {  n2 S1 d7 h7 r    EVMC6747_init( );+ Z% q: s( @. C4 [* E
        /* Call evmc6747_intr function */
' Q1 O( k! f* v: O6 ~; e1 A    aic3106_init( );- ]) J% K6 X, U- J* Q9 w
        while(1);
8 ^1 s4 f  D  D* q% k- M2 h7 Q# ^}
( P0 f. D' |5 i/ C6 b5 {8 L& y# j8 O, `9 B# d* a6 m
. f8 W# x4 [$ V3 q
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
) [. h# b4 u* g$ W; K4 n3 l% G/* Initialize MCASP1 */
& L7 P/ T7 s  A8 S2 H; w    mcasp = &MCASP_MODULE_1;
1 i! x: O3 o* n, v- \9 H+ E. P. K+ l    mcasp->regs->GBLCTL  = 0;       // Reset
' v0 W: u' ~( v, F, ~    mcasp->regs->RGBLCTL = 0;       // Reset RX7 t0 P; A4 M. P
    mcasp->regs->XGBLCTL = 0;       // Reset TX
/ p  r, ~1 [& p! R  I5 s& X    mcasp->regs->PWRDEMU = 1;       // Free-running$ W, m. b/ u. k3 e; }. F
   // configure McASP0 receive registers  P* g# O! R5 `1 T/ ^; Y1 C" B
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used" O* [  K' k& A
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
  x+ U- ]! v" u, k6 Y4 Q# s    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word3 |) J4 D: w1 {1 e
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
9 m7 |9 a6 l+ [7 B( K, z: v  Z    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)8 Q) Z& D; }: h9 p
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1! a, M. O3 m% f8 h0 \" X) `
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
+ k9 p; A4 Y( t& H9 X3 ~    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 [1 [$ }- b& N8 W& `: C( p' n8 F; b8 _; v* l. E) |! \
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used$ v3 o! L/ g+ @* G; E
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 _! x$ N: Z6 Y' G/ c, y; {    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
: I' V6 L: [: s* u% H' Z0 `    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16# f7 E& q9 {. N: E3 \7 _# D
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
/ ]" I- x6 E7 F$ `' C) m$ w    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
. l6 Y; q! F% g    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit0 r4 Y2 ]* {2 T& w+ W4 K2 t1 x8 i
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2567 [$ o) n! V! u/ t0 v
! h( g2 V' U9 C3 W
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
4 |, u, H7 l) }8 w7 E$ ?- `    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
! q4 N" l  @) n2 }* y3 W7 f( c0 `    mcasp->regs->PFUNC      = 0;          // All MCASPs# a+ `, V# n9 h- t: s6 j
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
6 I- r7 B# o+ J  \
6 U3 r" W. }  \- H7 _    mcasp->regs->DITCTL     = 0x00000000; // Not used
9 e" ?& X! G# v* C    mcasp->regs->DLBCTL     = 0x00000000; // Not used
' z+ v! r4 w& K& }* ^* F    mcasp->regs->AMUTE      = 0x00000000; // Not used
* `# X8 l; X2 T( ~: @9 C# F1 P/ h! L6 y9 B
/* Starting sections of the McASP*/# I! `. I! j- t3 z
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
; z; K, Q( `8 |$ \6 E7 k8 v    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  $ [& `# R, x" S1 @( N, h
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; % o) U+ R, k7 h$ ?1 v
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );' [5 e, M5 \6 I9 J) N8 j' w* U

2 z) r% K/ z3 W0 b    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 5 H* G3 M; [3 @  {/ p5 Y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( d5 G, ^7 e6 O" G6 W: F. i
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
; z' O9 _0 Q( m* O" ~+ P+ X& ~( S, \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
" Z3 o) g; ^4 D! l  U  x# D  B& @( m
    mcasp->regs->XSTAT = 0x0000ffff;
0 A& U8 a, ^: I7 D/ O4 N    mcasp->regs->RSTAT = 0x0000ffff;
- D4 l) B% E1 a8 i0 C3 w$ j9 _" m# c0 |' F6 M
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;# r$ y  g, J7 J! v1 J2 u& p
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );- S9 H- h1 y; `4 U& B7 ]
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
" C8 u6 K' o2 z% T- ]    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
$ S) ^8 X8 `8 d7 w- f6 v/ u* M+ V7 x. g7 U# {3 P9 S6 N  D
    /* Write a 0, so that no underrun occurs after releasing the state machine */
; o$ M6 n) K  ~. W. B    mcasp->regs->XBUF5 = 0;' E4 D5 \8 z% d; E' r
    mcasp->regs->RBUF0 = 0;- [5 G: H' s# F% ^: D" `

/ N# ]. `+ B/ M7 v/ o    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; # n" L( D4 U7 Q  }8 [
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
2 k* }* X$ @' H    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 2 i/ h' J, K! n1 I* r
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );$ G9 s( P& u4 k+ E$ x4 e, }3 ]. r/ u

' v1 h" ~9 w" _8 }7 ^3 o& F- ~) C5 i. G7 j    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 1 b% x& [+ G$ G# B, g( N. @/ {, R% i
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );2 i! J+ F- w% O# Q
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; . X$ x4 Z0 e- W( x% o( K" z; I
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
- `( D: N( L' Z9 c9 E
  h* c% R, W  a  R; j9 a- A8 ^! d! q0 {8 o    CSR = 0x0000;
2 x! M5 T& C7 g4 n" L( r; x    INTC_INTMUX1 = 0x3d;5 S6 d& F& R% j7 _
    ISTP = (unsigned int)vectors;
9 j6 G6 y. x0 \$ v' Q- J# ^4 g1 s4 R    ICR = 0xFFF0;  1 G) V7 _0 K% a# M; u/ C$ Y
    IER |= 0x12;  8 C, Y' \3 C! \: u* |% C0 D# A0 Z  ]
    CSR |= 0x01;  7 M9 r- R' t& A9 ~
# |1 G3 s0 A6 h( |
, r1 B: }5 O% `9 Q
- K' g4 ^+ p% H+ I( p
还有就是两个输入输出函数:- V) a- T$ w0 `! v. q" Z
void output_sample(Int32 out_data); L" d( _' w, ^  S" y1 U- M
{
& T, t+ }( L; ?+ j& X  AIC31_data.uint = out_data;  
- d0 ^, C  N$ R# k) Y. h0 Q  MCASP1_XBUF5_32BIT = AIC31_data.uint;* g7 ^& O- P) O0 k5 L. }
}
- y2 Y, `+ n: ^" q2 E2 \
5 g( _" G# I& t0 X4 GInt32 input_sample(void)
8 l+ ]0 E$ \* A7 ?4 v{  2 Y# A# ?8 b) ]( k( k5 J) `, h, H9 U* J
  AIC31_data.uint = MCASP1_RBUF0_32BIT;# W% }. e8 _' j7 W
  return (AIC31_data.uint);
6 K: P: q# g6 w}' }- Q) E5 R1 L6 u# g- b

  K! P: @( N  N$ S
分享到:  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-24 04:32 , Processed in 0.048698 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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