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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:7 K  H0 V) ~0 S- o, F4 {8 W
main文件:
& ~. A( X. U0 I, i# V6 dinterrupt void interrupt4(void)  
9 f" L+ [: x) y- J; C% Z% p  P{0 |4 A. A5 x4 R1 S' d& R
  Uint32 sample;
  O0 E  B5 n/ s4 V6 ^! i- Z0 @; `
  sample = input_sample(); // read L + R samples from ADC, B4 d' O6 T! C- Z$ T
  output_sample(sample);   // write L + R samples to DAC : y( u" o; |' l1 [, ?6 H, G, u
  return;9 y4 N% Y9 f- V" N3 ~
}
+ a8 m, u: s  P* {2 I  {$ s% Y; z7 i% ^  B9 r6 V7 O$ b
int main( void )$ M$ K: {+ Q7 d2 ~
{
# |. m) I6 k, n" s
: R! z: n1 T1 j8 S% L/ m6 ~9 H0 b    /* Initialize BSL */! V3 D4 q6 \1 E3 [6 \5 Y
    EVMC6747_init( );* C1 w& x6 G6 O: E7 z) s/ `
        /* Call evmc6747_intr function */
$ X, C+ D* W, X9 I& X: }  O5 j; E    aic3106_init( );" x6 H* }8 Y' C7 c3 y; M" }
        while(1);; u- S' E  F! i. C
}1 ?( D+ f) A- @. l# ?; G3 ~. h
1 e$ O6 `! y# ~0 f$ p. b- F; S( E
, O6 _9 [3 ]& L; X# u
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题9 U. x+ S- ]8 _( t0 \
/* Initialize MCASP1 */) J! X. F- D% \( R
    mcasp = &MCASP_MODULE_1;' p3 O' l8 M  x
    mcasp->regs->GBLCTL  = 0;       // Reset" n2 M  J# T) q! W
    mcasp->regs->RGBLCTL = 0;       // Reset RX0 |8 w$ \: U; {& ?. U6 K
    mcasp->regs->XGBLCTL = 0;       // Reset TX& f. t2 |. T2 U* l& @
    mcasp->regs->PWRDEMU = 1;       // Free-running3 {+ e5 y9 t. b  F; a
   // configure McASP0 receive registers
; S! q" t6 Z) ?1 b) @! Z7 a    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used3 G7 J0 V' J( [
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( b% h# Q9 x+ x9 [' s7 j4 i/ M9 K    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word9 e' [9 n5 z% W9 o' a# w
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
+ ]% h% Y8 U% o' r$ B# D    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)- n) g0 f1 x( D; X' ]
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1+ O0 C* \* U7 j" d$ Q- w7 {+ a
    mcasp->regs->RINTCTL    = 0x00000000; // Not used* n# ^2 R: D9 ]8 h! p# G
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: M4 r+ j  h2 r9 j2 u
2 u$ Y% K( R* U4 L; O  b  D    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used% p1 D9 ^4 o$ s0 d4 e' c2 i# r3 C
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
  X  U4 W8 T# f+ P; B3 X    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word/ X$ o$ S5 G$ ~& m3 ?5 p) U2 ?
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
% \+ L: q# }) T    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK  J: V4 v$ _6 c! {& M, z% i) ?& E; o" N
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
5 `) ^9 w7 g- i8 F) G4 ^/ J9 s: P- [    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit* u9 H& C8 B1 {" _# ^3 G
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( E: u  m' V$ ^# j/ C
4 e! B" n4 a/ m0 F% U( i7 ]8 _1 e    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN1 H& ]& q- X! s
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT' q. G; @5 [0 |/ H* r) E
    mcasp->regs->PFUNC      = 0;          // All MCASPs: s2 j% k1 S" Z; o* n0 g( V! G
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX12 F9 z4 o9 b1 G" L" _: M5 Y( u! v4 L

. k" f; o* ?: i4 |" W* T    mcasp->regs->DITCTL     = 0x00000000; // Not used
; `3 ~; K/ P- y" W  i    mcasp->regs->DLBCTL     = 0x00000000; // Not used& @9 Y: R9 |1 V2 t/ V8 u
    mcasp->regs->AMUTE      = 0x00000000; // Not used
$ i7 N: {3 M5 C
6 |8 i5 C$ \$ [; L' }/* Starting sections of the McASP*/
5 ^! @/ r7 Y7 w    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 1 k% q2 y6 r* f- w& r8 x
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
. p; N4 O8 P, X: s4 D# ?+ ]    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
; R8 @; x, ]9 s. O    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
% h% x9 ]0 Q9 R9 X* m5 I; C8 l7 l' N0 U& P! b' ~* Q* l+ h# L0 V
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ' Z/ ?  {: b2 J
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
) L) Q2 v( H* A: O4 G/ S0 H: M1 a    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; : c9 {( @) I/ J& u$ g4 a3 y1 `
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );) ~2 }3 y7 @* ~6 s8 t+ F
- ]6 l. R9 z9 K
    mcasp->regs->XSTAT = 0x0000ffff;   U) R7 p" m4 ]% m* F  u
    mcasp->regs->RSTAT = 0x0000ffff; 5 i3 f6 L% a$ Z! P# R, w/ w: l

# S8 o& ?5 `5 m0 L# b    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;8 E" e: X5 R# c) i
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
* O/ y; f' W1 ^8 ?2 o: F    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
& k: u  ~* \8 X9 r/ @) E; {    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
" \8 d, G' _9 I1 Q5 [5 ~" p$ `; D! J" b) n
$ Q5 a3 I: l# `5 i8 ?- _    /* Write a 0, so that no underrun occurs after releasing the state machine */
  Z7 \6 r% a* Y+ G    mcasp->regs->XBUF5 = 0;/ C: d( |, j! \. Y
    mcasp->regs->RBUF0 = 0;* e$ O9 u' ^% m1 Q3 s% F) |

7 d/ D* q( f9 R% {8 p    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ) G; j/ ~& `+ s1 X  C- `7 q* r
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
% }6 ]$ p* y+ b7 Q& I    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 0 x: v3 `+ h' o! c% F6 ]
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );3 R- r; Q1 N/ R/ H$ b

" R8 h; ]7 D3 P/ S! k4 W) _    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; % N7 q- i) w& w
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
2 c0 R, L7 W& t* H    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
6 e7 n5 S1 N& V+ S% Q( p; R7 ]* d    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );8 l! `- _3 X4 s  ], ]4 {8 |- }
, q/ O+ \. T% Z  Z7 V
    CSR = 0x0000;& _4 U& y% L' y  A+ J) n# `& }0 g
    INTC_INTMUX1 = 0x3d;
, B! i  H" K* h    ISTP = (unsigned int)vectors;
  K. Q3 @- I6 A    ICR = 0xFFF0;  : [, U( _1 }+ A" u: t
    IER |= 0x12;  
7 M$ \3 r! O8 S7 a( w: H  @    CSR |= 0x01;  
" }! R4 q3 c3 @) }' K* v3 a3 Y. d$ q2 Z! y5 K  u* P
1 E9 o# h; y6 L' W

5 P  V* I" V; {) _( ^0 d还有就是两个输入输出函数:% Q% W4 X- k6 R5 {# r
void output_sample(Int32 out_data)
/ V' w8 g% p  `) U, C( U: b# ]& W{) J; D- k2 n3 a0 l5 g, f* }0 e
  AIC31_data.uint = out_data;  9 B1 |8 x# E0 M3 \) [/ P. j! I4 R
  MCASP1_XBUF5_32BIT = AIC31_data.uint;3 r' G6 x% b8 j
}8 a4 v" R* R# J+ E# G: [

' E3 G0 d+ R4 P6 x% g* O( FInt32 input_sample(void)5 N9 v# b$ x1 R* V5 o
{  
, S8 ^" x/ H0 b  AIC31_data.uint = MCASP1_RBUF0_32BIT;+ r7 A) {3 R9 a
  return (AIC31_data.uint);) X6 {% O+ N" v) d7 j. k3 p* ^- N" m
}- r2 o9 V( S+ @  q% _
8 {  W, L0 b& o+ _' N6 P
分享到:  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-1 08:17 , Processed in 0.037515 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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