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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
, k# I: j3 I9 w8 p5 M! H- R. bmain文件:
9 b; k" s& u$ M+ Xinterrupt void interrupt4(void)  ! V1 _! x0 W5 f
{5 [7 n% w. u# C& m, l% z
  Uint32 sample;
: c1 Q9 c1 R% s  Y" M' I4 G6 z0 f$ y8 r: f5 K. C. G2 l) `. w
  sample = input_sample(); // read L + R samples from ADC! t0 _6 }' {+ o( T' ]0 f" a6 V
  output_sample(sample);   // write L + R samples to DAC ! b1 f6 n8 k' o2 }' D% B% b& f8 E6 D
  return;
" x7 m( c) ?' ^$ A6 y, c, Y$ y. A' i}+ j7 n: V5 X& N4 W& g& {  ^

. b7 d# y( U% Q# |; vint main( void )
: X: N% H7 V0 A, t9 t{
- Y% h% a8 h* E  N: m
) A! y8 \3 _9 j3 ?) t# a. @    /* Initialize BSL */
2 ^7 h1 Z. K, f* d6 R5 u    EVMC6747_init( );) ^2 j/ W5 ~; h  a: _- ^/ ?# y8 i
        /* Call evmc6747_intr function */
- ]+ X( E/ b/ d    aic3106_init( );
- I) Y( @" y  ]$ v        while(1);
5 g& _, W/ E1 ]( B0 ~8 `}# d9 U+ G9 n5 t. u) v

% L8 t/ w' K9 t. Z/ y: L# p, X9 }: |/ X7 A
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
( U9 [- Z* w2 y" y& G2 ~/* Initialize MCASP1 */0 p$ d& `5 W5 q$ p$ l
    mcasp = &MCASP_MODULE_1;! x8 y( m* }6 I& h. x
    mcasp->regs->GBLCTL  = 0;       // Reset4 R9 D* n7 q5 S0 v& z& V5 n- }6 X
    mcasp->regs->RGBLCTL = 0;       // Reset RX0 }6 J; A% O" R9 v9 g3 B  J
    mcasp->regs->XGBLCTL = 0;       // Reset TX4 S; C" R5 z& p! ]/ J+ F
    mcasp->regs->PWRDEMU = 1;       // Free-running+ U5 X. m, x) ?6 q" e
   // configure McASP0 receive registers
' x7 o( y  e9 Y" Q9 q    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used( `9 ?8 z; a5 |; y+ U
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 t% Z. R" [. i8 P! D) Z. t    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word' ]: J4 ~" N# t' o3 }
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)7 Z+ B! p2 `2 H8 ^
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
" Q. y( `4 z) G2 E- N    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1* R1 t5 L  {  F4 s5 c- N8 u9 J
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
  W' x0 s8 N% V! u8 k    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
) J% d1 Z( r- ~8 b. ]  K( q% K0 o. [1 ~0 R- `% A  c7 n. t
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
/ }5 w1 M3 m& Z9 r% F; s7 E+ o+ o    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. u) \* g  i0 W3 A( p
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word: ?& z$ r8 R: H: r' l; E8 ~5 f
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
, B( x/ P$ a% T9 {) R; r    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK$ x- t- T1 V7 i. X, ~2 s5 |
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1& m& l* Y$ ]7 I* R) p( _# A
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit8 h$ f; e/ N8 p
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- u! r; k& x& P9 |& v" y, q$ K4 f0 U! T% b( S7 {, C, M
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
. v( ~! R6 \' J6 L' v/ x( T) f    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
  Y3 ?3 o# e! i9 `    mcasp->regs->PFUNC      = 0;          // All MCASPs1 V- r+ g' H$ N( G6 D
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX18 @1 P( s% |  m9 t9 h
3 X2 F8 B( ^! W# W, v9 M/ k# v3 G  T/ {
    mcasp->regs->DITCTL     = 0x00000000; // Not used& A) \- E/ L% E
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
' j) n  g8 e3 P# M% o! B    mcasp->regs->AMUTE      = 0x00000000; // Not used; r. t" D' N' J. V7 P! l/ n

0 ^6 Z8 c2 }, V& H/* Starting sections of the McASP*/* c/ i* A- }, U$ }% G
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
# n1 i& x; _# i    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  5 O9 e, l) u8 {% m4 A
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 1 g1 g% j5 e& U/ `
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );  d; k* ]+ a2 w& C5 f

- R$ C) Q+ B( i$ l3 H    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ) J  Q; e* T, b9 Q# _! A
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
) s- W/ \! u5 }    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
3 y2 i) t/ \5 F* C( ^2 N    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );; N9 E0 E, F. W+ a8 p4 o

8 Y/ a2 [) B8 O" y+ w1 z    mcasp->regs->XSTAT = 0x0000ffff;
8 E! C$ Q% o% y/ l; D: H! P    mcasp->regs->RSTAT = 0x0000ffff; / ]( B$ l/ V: N* {
7 X- ]( H1 n( o( m  g' z
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;. f' T9 y0 Q4 e7 Y8 S$ v/ ^
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
7 x3 l7 {8 f$ c: [5 r    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
( d, b6 L& t4 R1 L: ?6 D+ g    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );: K7 C0 \/ Y! s7 F

' i1 Y0 z6 ]- |9 {2 T5 n: y- d* \% D    /* Write a 0, so that no underrun occurs after releasing the state machine */
6 I8 D) J+ E4 J( |' r" k    mcasp->regs->XBUF5 = 0;
8 L7 {" {+ J  a" n; w$ G, B    mcasp->regs->RBUF0 = 0;
- _' p- J1 F- J! P+ c' y: r
" N  M1 i& g9 J. Y  s2 R; M    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; - ?. F4 S; f) c4 J9 w( x6 |
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
9 O. e/ l+ q4 g    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
+ A+ E$ {5 [* N; r) ?4 G" t    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
. m% U" B. \' t; p5 m3 @; Q4 a4 V/ V
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ) n$ b2 X/ C* r
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );% |5 a# B9 v( A2 b7 g  ?' b
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 7 X$ a( w" J% k+ Q* A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
5 m0 L; b0 M0 ?( d/ `* `  u' ]5 H3 S% `% \& q, m: R! ~
    CSR = 0x0000;: A* p6 ?& m. o9 {" b2 u
    INTC_INTMUX1 = 0x3d;( x8 s- l; Y5 H) g0 R. i
    ISTP = (unsigned int)vectors;
; Z, h3 c: Y- r: d- A    ICR = 0xFFF0;  
9 ~% {, ?7 `. _; p    IER |= 0x12;  - [/ t( A+ X( W- P; P
    CSR |= 0x01;  + u/ r% k" O* ]4 v: X
1 A4 S0 W, r: U3 O- c& o& M/ E6 L

2 p) T2 s7 z- s2 B- r, L+ @- A5 f1 L( A
还有就是两个输入输出函数:5 L* U; k( A6 F
void output_sample(Int32 out_data)
, N: b# A5 ]$ x8 I7 m/ z) P+ t{
; c: z: Y& [* a  AIC31_data.uint = out_data;  4 N' o; J7 y( I5 j. o! E( X
  MCASP1_XBUF5_32BIT = AIC31_data.uint;; F& U  \( E& c4 g+ g
}
; D, T7 X. _5 m! ], @7 S  v1 P/ D, [
9 R+ C: o: z7 mInt32 input_sample(void)6 N6 a& n6 s4 [3 H5 w4 `
{  # N: n% Z' @8 v& H
  AIC31_data.uint = MCASP1_RBUF0_32BIT;% w- T7 v3 v1 b# g+ Q3 U& h. X6 ~8 W
  return (AIC31_data.uint);9 U4 K4 u9 u9 ?2 w
}
6 G/ X5 [) a; Y: a) m$ G/ a6 S8 ^& \! C" b
分享到:  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-17 06:32 , Processed in 0.036003 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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