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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:6 r& R' X9 T6 |, g' z8 w9 M( h
main文件:- `1 A- C" B1 O$ N# P
interrupt void interrupt4(void)  
6 k6 u3 l4 ~  Y( |4 F5 H{
% c- \( d& D  M8 W9 y2 M  Uint32 sample;; K4 c; @% m4 t. e) B- C/ Y
5 }, O* D( g  r% r2 a0 d
  sample = input_sample(); // read L + R samples from ADC
$ Q2 ]! H3 F7 e  P  output_sample(sample);   // write L + R samples to DAC ( V3 _- s1 b; t
  return;
1 N: S- G6 a& M6 [$ ]$ n}. h! D  i- s0 I
! E2 j5 q  R& ^+ y% n% }. N
int main( void )0 G2 _! ~+ A. @$ T0 q
{* b' u  s1 ~( o: R; R
/ @( i) C. |" }) [7 f
    /* Initialize BSL */. _- y" n8 A/ \: u% h$ q# A
    EVMC6747_init( );
6 s  o2 P: A' O* g) B        /* Call evmc6747_intr function */
8 \4 k/ P) \0 ^  R, ^1 H# g( Z  b9 ?    aic3106_init( );
6 X6 [7 H  D- x& ?. d8 |6 E( x        while(1);
8 ~" {8 `6 j& i6 d}% v8 `0 X: [5 p6 G7 i8 j" Q
: e3 R" T0 R( [% n1 |+ \3 {
% X$ f, {1 v" Z- e4 Q/ E
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题# i- u1 V1 \9 [. \1 U
/* Initialize MCASP1 */  a; m0 F) G" v$ I5 ]  D
    mcasp = &MCASP_MODULE_1;6 l1 |% I0 C- b2 R4 a
    mcasp->regs->GBLCTL  = 0;       // Reset
. I% A' G# z1 U  T, p5 m5 U    mcasp->regs->RGBLCTL = 0;       // Reset RX/ I5 f/ }; ]5 L: n
    mcasp->regs->XGBLCTL = 0;       // Reset TX
& ]% O) c9 r: c; R; ^    mcasp->regs->PWRDEMU = 1;       // Free-running
! Y, y0 V8 x) o+ O# u! G; ?   // configure McASP0 receive registers
; E: `1 h4 X) m  c, X2 s1 R    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
  Q' y. s& E$ K5 z    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, D1 d8 t/ d0 [) t$ `. x2 T
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
/ x- g1 n' B% i1 F) l    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)9 f6 t4 @$ @8 c9 q0 g4 ]) \. }
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side); a3 Q# Y) }/ E8 c7 ?
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
' \& y8 q' O: j/ e- J+ s2 @! u' z    mcasp->regs->RINTCTL    = 0x00000000; // Not used
4 x9 r5 |( D" e3 A    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! v, h! N/ c* A7 q8 ?1 y0 J0 S7 [( R
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used" [. b, u3 |9 N6 u
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. k# n& V, x# P" r/ v5 u2 X: e/ N    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
2 O& S: c$ r& I  H6 }9 r    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-163 ]3 l3 X! |4 o% q+ h: ^" t
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
# O* P  j( h, \+ }+ R, X- V    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1; l; Z! O" n9 ~: U
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit; S+ S* E0 y9 @
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: B9 W  o% W" G- J8 {

: o5 V+ F, M5 n2 J- M) k9 x    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
7 C5 J: ]: F3 k' p% ^# i    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
' H4 S; Q4 c. G1 N! T2 [! M    mcasp->regs->PFUNC      = 0;          // All MCASPs/ ^: O. D. k9 U( o/ K) R
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
2 g( V2 C! h3 l- o- L+ J7 v4 y, `) J2 O! y; v" ?# Q
    mcasp->regs->DITCTL     = 0x00000000; // Not used. X5 R' V! m! ~/ d* G% e! P
    mcasp->regs->DLBCTL     = 0x00000000; // Not used9 g( L8 s! T* O1 f  N
    mcasp->regs->AMUTE      = 0x00000000; // Not used8 d$ Z$ q& _# Z. z, g

$ z$ G. a. o8 @9 |/ R8 v& I5 |2 B/* Starting sections of the McASP*/$ Y. f, j( D  Z
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 1 d" Y' S! {' Q* t3 r- @
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
6 [* o  J; I; `    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ( G  h; a! d* y; s! Z  W- g
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
0 Y" v1 z' y& N: M- p# I; U! z
% L2 v" Z1 b* ^2 }    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
; Q9 ?9 H6 B6 i1 ^1 g' l. J    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
, o  |, x) p% v    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
% Y% @8 o! Q7 |    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
- N+ q0 [. F% a  b. w# u* c
/ Q8 C8 ^/ v  T1 w    mcasp->regs->XSTAT = 0x0000ffff;
: c/ H* P& _1 t2 W  ~1 j( g    mcasp->regs->RSTAT = 0x0000ffff;
: z& O4 e0 f" l# G7 J+ y) o% H3 t& {- f7 H- y
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;( n+ j/ X' p4 I0 |  }
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
5 a  q! y' r1 k& k9 i    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
4 x+ M1 s/ \. b    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );0 o0 h2 @  h! ]( ?3 c; }

* }& _) L, }4 Q; Z) s/ x' R: f% U    /* Write a 0, so that no underrun occurs after releasing the state machine */
+ S5 [7 M" O! A8 r; y" D    mcasp->regs->XBUF5 = 0;9 z6 ]4 G, F! b6 @/ h
    mcasp->regs->RBUF0 = 0;
) ?- d/ m5 }8 I6 c8 p7 ^3 [8 p/ G) y3 U' B
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
5 K, q+ [9 y) O) |+ R7 g    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );0 g" `8 _3 u7 S+ a9 r+ A
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; - z. `' A2 r2 L8 @
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" r- V6 p& R" O+ s- u4 \
; l7 E$ ^0 O, ?- N/ O3 ?1 C
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ) Z: W7 J9 Z- f9 T
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
) j* U' g, F% `. @# y7 a8 q    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 9 B& X2 ?* {# ?4 d6 A$ l9 D
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );1 {* L1 r$ H3 o  m3 T

& L& h) c! L6 w: U/ t    CSR = 0x0000;
- p" i# ]$ x" x+ ]) V: Y+ O    INTC_INTMUX1 = 0x3d;; l6 [+ _6 A" u9 {8 d
    ISTP = (unsigned int)vectors;
- z+ h0 g0 m$ G/ q6 c7 @  j    ICR = 0xFFF0;  
, [2 p( h% T* @1 `    IER |= 0x12;  6 @- v& |- X0 \9 m- ?6 \4 x3 C
    CSR |= 0x01;  
8 S0 v7 f4 z- M9 X9 B3 W, A# \
4 g$ u$ r& O8 a4 G( l' C5 d( J- m9 g) m- M7 ~# E& F6 Z

, v, {* |! L- ]4 a* G还有就是两个输入输出函数:9 e& O7 R# x, e& {
void output_sample(Int32 out_data)7 q; ~  [; K3 _5 N) y
{# m2 ]) U$ B  ]. A  N! P$ ?5 M
  AIC31_data.uint = out_data;  
' S# j. I! v" O7 n  MCASP1_XBUF5_32BIT = AIC31_data.uint;
. \; |4 G5 |% M}
6 d$ @1 l* h' @0 q. ]- E' f  [' O4 @6 A
Int32 input_sample(void)
  X6 r7 s1 w0 X3 z% ]{  " ~- j% D( s4 S$ l) k! P7 X# A! Q
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
1 E* g2 o1 _0 `/ ~$ p  return (AIC31_data.uint);
! F; S3 V# @7 t+ D6 ?7 `}
" A+ O" J6 ?+ \* g. w
# E! u! x9 e. X5 z1 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-12-17 13:03 , Processed in 0.039261 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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