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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:2 `7 _% `3 Q9 _5 T9 C: Z9 O. n
main文件:$ b) Y+ I! U% s& `3 o* g" C8 u' e
interrupt void interrupt4(void)  
" _3 i, Z2 M/ ?) p+ j{
2 {9 R( p3 d( s' d+ O' |% ~/ b  Uint32 sample;
' d3 M& |8 l2 `- \: _* i6 t" `7 z* ~, q$ [4 v" p
  sample = input_sample(); // read L + R samples from ADC6 }# o  T$ K8 Z% R: R; P, Q) d8 j8 r
  output_sample(sample);   // write L + R samples to DAC ' L# C: `" T6 h! x4 M5 `( J
  return;. Y# g& s( x) i! X! u+ X
}
8 ?1 J# p% _$ _8 m3 ]4 Y5 }. B
% Z2 P* g6 @- u& t; A7 k! q1 p4 u$ tint main( void ). `; m6 B0 S# ^6 g, y
{) l" }3 O* l2 l7 }  J
3 C; Y. J+ d, o/ m  Y( M4 h9 K
    /* Initialize BSL */- S! s  y( f, b3 q4 U% g$ L
    EVMC6747_init( );
  l- w, l9 b# }7 C) A$ t        /* Call evmc6747_intr function */
7 a( g6 \: _. W6 Q* o* l    aic3106_init( );
) a/ N) I5 ]' u2 M! n, J        while(1);4 S+ V( [6 L# }7 U5 L
}  ~9 X5 G: F. ^3 R8 ?$ m+ W

: ~9 i" \" ?7 s% H1 b( r5 J4 q4 S! g
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题, U0 b/ S7 t9 h5 U. H8 S( @3 x, o
/* Initialize MCASP1 */  u% M: c9 B8 x. Y  V
    mcasp = &MCASP_MODULE_1;* J( a, z& n+ C. _& g2 N
    mcasp->regs->GBLCTL  = 0;       // Reset9 x# U9 l8 a0 Q+ s  x# ^$ f
    mcasp->regs->RGBLCTL = 0;       // Reset RX
2 B: F( o5 A) G- s; p  ]    mcasp->regs->XGBLCTL = 0;       // Reset TX2 I, U* C' L* {8 k0 J" H. \
    mcasp->regs->PWRDEMU = 1;       // Free-running
/ N3 c0 q" m  q4 Z/ w   // configure McASP0 receive registers% K1 v, b% u  ]7 F: p
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used# N' r" O$ g, ^
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus; g2 ^( c6 \- l5 b9 d' ]
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word7 W; o$ p3 c, Y# h
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)  o8 P" a3 B, i  b2 h
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
* o9 x) x7 e0 D) n  f    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1* Y5 ]$ F* c+ V) u) k1 H
    mcasp->regs->RINTCTL    = 0x00000000; // Not used- B$ c; I9 ]# R* V; o
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' Y: e: [, s! @8 }9 }; c
# o& F7 {/ s8 j& H8 u$ ^    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used0 E! K: ~* Y/ }  `% a$ S
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 z. r/ \* H7 p; m# c+ }    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
6 n; w& i5 J) O( s9 d# {    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16# t* s6 K3 m; k# M. C" {
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK: n8 S  N- {* N9 O2 ^- J% @
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
/ X  d6 J4 q: k5 B. X. ?    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
8 h9 B" ~- w) `# S    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 u4 R  c' Q5 p0 k! a% O) n% y2 e+ O8 P, E
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
1 z$ R' I6 X% X    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
2 L! _5 [! Z+ ~' \    mcasp->regs->PFUNC      = 0;          // All MCASPs! F' ]7 R- e" Q2 v) d9 l
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
* g$ L, V# y+ y6 |
" m% a+ I! P5 S5 _- n  Y$ K6 X/ ^    mcasp->regs->DITCTL     = 0x00000000; // Not used
6 @' W6 b; T; @1 E* ]    mcasp->regs->DLBCTL     = 0x00000000; // Not used
' o2 v. q% D9 ^+ g9 K& J; j! `- l    mcasp->regs->AMUTE      = 0x00000000; // Not used' A5 F( |* o) P) N

+ ]( H& `4 [* K& I1 z/* Starting sections of the McASP*/* w( P, J" W2 y9 \- S, P5 P! f
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ) I1 U; E  k9 `, a4 s# |8 {7 q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );    e) D$ _- B+ ^2 q- l6 L4 f* n/ `
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 3 R. _" u! b; ?7 @- ~( p
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );4 ]( ]) i" P$ i/ `
" U( T8 R; Z* T: T3 i6 f' v
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
8 x5 U- \: J- Z7 N; o    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
8 d( M$ X5 z5 b6 y7 V& J: `    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
: G; |. E/ I# ^( Z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );/ f7 `" r& A& o( |
! @( ~1 K3 n3 ]
    mcasp->regs->XSTAT = 0x0000ffff;
' M* R3 }8 Z. r0 l6 ]    mcasp->regs->RSTAT = 0x0000ffff;
2 R: }$ J* _, d8 Q5 u! T  S5 D9 s3 z$ m+ V
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
' G" N" u  n+ ?% m, L" c    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );0 U! [; I& r( B3 P9 L
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
2 N0 x, G" p- Z- Y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
0 a' L; Q2 x( n4 I! a9 _/ m$ H* Z" T. l% j9 ~) W
    /* Write a 0, so that no underrun occurs after releasing the state machine */
* d5 l* K# U5 J# a' I' h    mcasp->regs->XBUF5 = 0;6 C; b! \. a  u8 A. v: Q
    mcasp->regs->RBUF0 = 0;
- o; B/ _2 E* u" u' ~0 T% k; |# E4 B( \7 X
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
' b  w* Q8 u! g    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );: m9 [9 v" I- n* |7 Q2 R
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
3 `0 g$ U$ p# K% v- u2 u1 b8 a    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );) I, h: A2 R5 J: ^2 A& }

+ B5 i/ ]# r) S! [5 _  X    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
  Z4 }: l) o* ?( }8 m7 ^' D  u) ]    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );0 Z: D& q0 Y' a5 q& M( N
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
/ B+ {* J' o; l6 I' {. n    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
6 e2 q9 f% Y" R2 H5 s
5 R  D1 B4 u5 Y5 h8 K; r    CSR = 0x0000;  g9 Q0 J% J+ g9 a. r
    INTC_INTMUX1 = 0x3d;
0 t! }% ~. V( x7 v" q9 j5 E    ISTP = (unsigned int)vectors;! W* v4 o. @# n6 c) c3 P7 H1 |$ f
    ICR = 0xFFF0;  ) w# n- l; ]0 A1 f
    IER |= 0x12;  
5 C9 F9 Y( x/ x4 ^6 @: z  q    CSR |= 0x01;  ) |2 o& \* q7 x6 q, g8 [

) S9 K7 d. E$ h) T8 h* P3 q0 Y
; g* r' e2 U" e7 z5 Z
7 ^3 i) m% m" m9 T& v还有就是两个输入输出函数:9 X6 y6 m1 T0 N1 g. T; G, y; g7 ^
void output_sample(Int32 out_data)
: t5 c3 _, T; ~: S$ ^- b, D{
2 S4 A! x, y/ a7 Y- |  AIC31_data.uint = out_data;  
7 Z9 h( ?. {3 s  B  MCASP1_XBUF5_32BIT = AIC31_data.uint;$ ^5 r- O  M5 b
}
! |; y7 G& \* v8 b' b2 A* [3 }
8 r, B5 r' f' R; I5 xInt32 input_sample(void)
) ?1 C! B; {* }( a) X{  
* G+ ?' m, R8 u  L5 k, O8 W5 N  AIC31_data.uint = MCASP1_RBUF0_32BIT;" v* B2 ?: k! B; g( V: |4 f
  return (AIC31_data.uint);
- F7 i2 Z# F2 I. t}! x. u7 X9 i3 B+ }! d" I  Y

3 E, e) }+ k1 Q% Q1 W
分享到:  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-2-3 02:14 , Processed in 0.046267 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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