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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:7 w; s8 \7 b' p* c/ r# G
main文件:3 t- E6 s) A$ P5 u! ?8 `) w  O
interrupt void interrupt4(void)  4 V- `- b6 p- D. s/ ~( E' Q
{4 I) {" E; v6 S- w# k
  Uint32 sample;
" D5 Y- [# t& c; d/ O, d  [$ ^6 h+ z$ `! ?3 `# P) E2 I
  sample = input_sample(); // read L + R samples from ADC( ~8 H5 c* {) r  q6 g- L6 \
  output_sample(sample);   // write L + R samples to DAC
+ u  v1 T& t* E: v  return;
4 C- B7 E& \9 C! _}9 [$ I7 L4 Q0 l; Y* a/ U
  x5 `8 X+ T9 R5 \3 @$ w
int main( void )+ j- W( v! X: E4 a3 \5 G$ ^: @' Q
{
) j6 p$ Y# Y# u) ~5 y9 U) u& ~! T! A% Z
    /* Initialize BSL */: h) Z4 B: K+ v+ q8 P4 v' _, O4 G
    EVMC6747_init( );( L, m% o# l# d5 d
        /* Call evmc6747_intr function */
& X3 [2 G" o- e    aic3106_init( );; b) Q. S% N8 U
        while(1);/ I% O! O* z: [
}! v3 f( f! h! K5 s
0 {" s: D" K# I- K2 i- p. ?
/ X& E' E, L* s8 T) d6 c4 T
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题- B. o  r2 H, C5 r" K( F( U
/* Initialize MCASP1 */% B( J- B0 [( S" W" L2 d  d
    mcasp = &MCASP_MODULE_1;
- ~6 w5 ]' d; T0 K1 U$ m* b    mcasp->regs->GBLCTL  = 0;       // Reset
8 a0 p" ~- R  a% O# _    mcasp->regs->RGBLCTL = 0;       // Reset RX0 s7 ~2 ^' R3 W$ ~5 w
    mcasp->regs->XGBLCTL = 0;       // Reset TX
& R* L# t1 s( u# N9 l; D) c    mcasp->regs->PWRDEMU = 1;       // Free-running: y- }5 u+ \  m
   // configure McASP0 receive registers
! j  T/ e0 Z) {" Y2 z. m5 K    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used. z2 c3 }) G2 o( J% {* k
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus. I  a0 R! D6 K% Y* _; M
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 l  d* a: Y; q! F    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
6 O( c0 [5 R4 u1 P; W  ~    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)% v% B0 a& l7 M, y. m/ E
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
2 R, c0 h# U* D, ?2 A$ H/ o9 `( ]) }    mcasp->regs->RINTCTL    = 0x00000000; // Not used
+ \/ G3 _' |1 e. p- c1 o; h" _$ M    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 v2 e4 e8 I+ r' S$ o
( v( b9 X8 `# m/ f7 F; R0 h
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used1 S( [  C" q9 s# F, b
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" o2 [* k# W& o$ H# x# |
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word) Z( l% x1 `  b( p* h
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16+ u5 u9 @" _! [$ q9 e; d0 _
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK, k3 W5 m3 l+ R% F+ X
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
7 c! M& ]6 S9 E: x, J# l    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit( K& Q3 B$ e! ^) y
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' F7 G" Z0 k* P% q
2 q9 i1 J% c! L1 y9 R3 o7 R/ e    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
+ B( ^. k2 p; ~$ S* \5 H    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT+ T9 `/ W& B) b4 U1 e/ b  y
    mcasp->regs->PFUNC      = 0;          // All MCASPs
3 w% V/ \4 U6 b, \4 {    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
# G7 T+ e) ?9 ~( K1 j9 `$ q* c9 W
. A' z5 W) Q. i    mcasp->regs->DITCTL     = 0x00000000; // Not used+ k6 o8 q5 T- u/ x1 \  e. @
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
3 {* G8 O* d: v. \    mcasp->regs->AMUTE      = 0x00000000; // Not used
* z# L1 f3 J4 S7 h
  ~( r; }4 M+ D6 ?( S7 J8 G- w2 L/* Starting sections of the McASP*/
7 T0 b8 a; R9 s+ B; C9 x6 L3 Y    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; $ a4 T* \$ _8 I- G6 m
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
/ c4 V# A. N" C) w; K    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; * }0 W% x+ q( w; l, @; k
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
. v$ ^8 E" T2 ]7 ?6 f  p
- G# L8 _4 N' w0 J    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
' \7 E7 e/ D. _; Y8 @    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
' b( R& P( |( n/ O    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 6 T% P7 I* _% G
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );5 I, a5 M% ?" Q0 l! v

+ V: X6 \2 \0 J4 T" e    mcasp->regs->XSTAT = 0x0000ffff; 9 `9 O+ r/ x- x$ x; k1 L" m( w
    mcasp->regs->RSTAT = 0x0000ffff;
' @& W- N; {' X5 l  {7 X; J5 \. t! C
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;. }6 f; r! [+ k% \/ F) f# L
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
+ `" N; |7 m( ^; o: N. S) \    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
! ], @/ d' N3 o    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );! n: Q3 F3 L0 h( b' D

7 u. a8 c% L! H# k9 u- m    /* Write a 0, so that no underrun occurs after releasing the state machine */
% \: J3 L0 d6 ?0 n! O    mcasp->regs->XBUF5 = 0;; ^0 o2 X6 ~. w! `4 s3 Q; ~" Z0 E
    mcasp->regs->RBUF0 = 0;2 }6 p) D4 x  U$ K$ n6 M
- D6 K; h" E6 j, l: @
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 4 Z. I* u$ W: f, ]4 t
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );# g4 g  S/ K, d" z( d0 \
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
6 `9 x; X& a& J" v0 o; b    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );8 R8 _7 Y6 }# ]8 y  y
" }5 @% Y+ `6 p8 l/ o5 [* m) Y
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 3 F( o" K- l7 c% f3 k! A  x3 j
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );3 T; }" R% x- w7 ?3 b
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
' r( z; [; @# ?$ ?    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
6 Q& I' m( t: e( C
' y. @0 \( R' y" t    CSR = 0x0000;4 z/ o- J2 j2 g* R- ?* @
    INTC_INTMUX1 = 0x3d;
3 V+ T4 J1 A- Q7 ~/ d4 U" B9 G    ISTP = (unsigned int)vectors;8 q1 ?" @- P) @  t
    ICR = 0xFFF0;  
. G2 v4 M* I# E1 L1 g) u* ^% G    IER |= 0x12;  1 I, }, K4 T$ L) @7 C! W& T
    CSR |= 0x01;  
( T' A* A8 C7 t! l7 J; Z: }5 G2 k
, Z% G' f9 T' L7 }1 t# }
8 B( C( Q3 @& U+ x: p
还有就是两个输入输出函数:
4 G' H; o9 v; o7 T, _9 i& D2 e" t* Yvoid output_sample(Int32 out_data)
: D$ A% D  W( e( Y' f+ F{7 ]! {9 i1 i% U4 M5 f, D! r. x# S1 z
  AIC31_data.uint = out_data;  ( y5 S4 Y; v' P
  MCASP1_XBUF5_32BIT = AIC31_data.uint;2 G/ d" I$ }+ D8 z, F
}, z7 v5 v* [3 P# A! k
" f- j( D5 ]- g
Int32 input_sample(void)
/ n) V; }, p; g4 x" y{  + b1 x1 b$ H$ K" k# e1 h' V# r
  AIC31_data.uint = MCASP1_RBUF0_32BIT;, G/ i9 Y+ b0 K+ ?" S- p
  return (AIC31_data.uint);) x8 J3 N  L, q5 r
}: z2 e* R, c3 [4 P, O. _: d+ g: [

+ l8 f4 N& ~' F: r
分享到:  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-11 21:37 , Processed in 0.038947 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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