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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:' N0 T  j0 S5 `. Q1 ~8 d
main文件:& h- Z- @8 K7 t( D- x$ s- \
interrupt void interrupt4(void)  * c  }2 J. _- ]4 t
{
7 a# r9 |+ k% T! u" _. O  Uint32 sample;% [& @9 ^; T2 C

: i+ T2 e- v0 p  e0 P8 v+ {9 ~  sample = input_sample(); // read L + R samples from ADC
+ u1 T: d5 f/ v! S1 F% _  output_sample(sample);   // write L + R samples to DAC " T* p- R; S/ c, S5 ~4 ^
  return;& B1 q! c* i8 k6 k7 h
}0 i& R5 p; d- k0 X2 h
/ |  Y7 ?6 _: z! y8 P/ M
int main( void )
1 T( v( W5 k8 p0 F# {6 n5 l. L4 u{& R* G- L( E- g- f; Z& a; B- S  x

: h6 |1 U: B; ?5 A% y% k! c    /* Initialize BSL */
7 r4 T. Z* Z8 D2 ?% @6 u    EVMC6747_init( );
5 P" |' \5 a* s' J  y& k/ j        /* Call evmc6747_intr function */# k1 P6 O. y2 c3 N3 s
    aic3106_init( );
* h$ f) |  [9 f  C: w( u4 B5 J+ m$ B6 m        while(1);
4 I$ B: p, ~0 b# ^* L}
+ r, S* h( E- e
. b: C4 ]( s( D
% G9 B) k6 x) [. W& P; s! ?. Uaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
* [9 E6 R  r; X# `, i2 C/* Initialize MCASP1 */4 G9 s4 C8 I$ g7 e2 T% x; w
    mcasp = &MCASP_MODULE_1;# q, }" K: ], c* A3 c
    mcasp->regs->GBLCTL  = 0;       // Reset
2 b; H0 v* ^$ t+ r% B5 w. m    mcasp->regs->RGBLCTL = 0;       // Reset RX+ w" c0 L, \: \0 j# ]# l( B. q
    mcasp->regs->XGBLCTL = 0;       // Reset TX" j  f$ i7 p! k% ^7 ]$ J
    mcasp->regs->PWRDEMU = 1;       // Free-running7 [3 f7 p  w6 Y9 M# v
   // configure McASP0 receive registers* ~( W. T1 m7 Q% N, n/ J# f
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used2 U( e( {; N* B. G- n
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ ]0 ^/ x* k, A* W$ E: @
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word+ a  p  _2 ~, u+ D  S2 S0 I
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)( }. U- F$ g* J& O0 K& ^  z
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
+ ~1 {/ n2 j2 J    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1: D& F" }) n0 @
    mcasp->regs->RINTCTL    = 0x00000000; // Not used; L5 O3 T/ A" [& a* @, e' j
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; w/ k( f. B1 ]! v
! U. P, ]  g# Q% C, }/ k    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
6 x5 l1 z. w8 P! m    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
/ B* `! ]4 ^, c    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word3 A4 w, |$ \0 d
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-161 H$ c% x6 J  y
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
# c3 r0 \) ~' P$ p$ c3 s) e1 X4 `' }" d8 F: I    mcasp->regs->XTDM       = 0x00000003; // Slots 0,19 e# ^$ b& u+ Y" S6 r( U: }; Y
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
+ K, W8 Z' w1 J% x5 p) a    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 s/ {' X, K$ `
9 b4 m- d% l$ D) |    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
' A+ j) U' b3 [  k' N    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT, ^& o& R/ Q% j& m/ b
    mcasp->regs->PFUNC      = 0;          // All MCASPs, D. j" e) M& }* s! w6 U1 j/ n" {
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
) E: Z" K% U% }6 e" N& P
* S% E$ t* I# Y0 U7 Z' N    mcasp->regs->DITCTL     = 0x00000000; // Not used
/ i; t" v/ h: I1 o& m+ ^: T+ Q    mcasp->regs->DLBCTL     = 0x00000000; // Not used
3 w5 H0 A4 _3 D0 n% [$ M    mcasp->regs->AMUTE      = 0x00000000; // Not used
8 }8 ^( S5 {  q+ n
9 {+ D8 G* T* V/* Starting sections of the McASP*/2 g% I+ F7 \: M2 E" v5 R8 Z8 Y
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; * E& A+ S/ V  _
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ( F+ D& |0 y# J( t; {
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
- R( Q  `3 a) s" ^+ m2 |0 q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );6 f& ?- k& p& `6 p# A, d

. e" |- K2 }: Z3 k/ [* p/ t1 I: B    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
# @; H2 Q! }1 p$ \    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );  m( e1 h& F0 |# I" j( k
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ! {! o* l: R* q' n4 I* h2 h( f
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
( t; T/ J/ z9 p
" R* i9 r0 ^/ x- u    mcasp->regs->XSTAT = 0x0000ffff;
% Q" H3 u- k; b% e' }9 W( m% o1 ?    mcasp->regs->RSTAT = 0x0000ffff; 8 i6 G. @  E# T5 W

; c# f% ?3 r. y' i* t* u    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;9 {7 x6 i  S  |7 n$ P
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
* C; F" M2 ?5 L- R0 ?* g; |! R3 o    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 9 ?. G& Q2 t1 Z4 Z) F5 R4 H6 l
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );: S( s/ l  |" A  w
* Y. d8 B& E1 e/ j* F
    /* Write a 0, so that no underrun occurs after releasing the state machine */# G" n# N# O/ R2 |
    mcasp->regs->XBUF5 = 0;& |" u9 T! Q( P, c* J) a& l9 n  f1 [2 V
    mcasp->regs->RBUF0 = 0;
8 ]( W: z2 ~! k: D4 T2 c+ U$ e7 K& Z, {2 k- [+ B
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; : g! l0 S$ h9 _
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );7 X$ R, k# f: p+ a. M# O$ O1 K
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 1 e& f& k/ j8 d! @, T3 B2 o/ g$ Z9 |
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );4 B0 e  @* S9 R4 t
/ y* k) l- U6 }  ~
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
/ V( b# m4 |5 a* v. s6 X! |    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
" m0 n7 u. s: |* b( K    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ' E, h& p4 f3 L' o
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );, l1 m& {: n  I* j3 r; g9 N

/ h2 {8 [. ?& f8 r$ v7 `# r) s    CSR = 0x0000;4 I. M% B% N; Y- I( N
    INTC_INTMUX1 = 0x3d;
5 V  I2 S7 A1 T, V: |" q    ISTP = (unsigned int)vectors;$ `* @& M: y6 `" c3 H( N
    ICR = 0xFFF0;  5 B. W- Q7 N0 ]" h$ |
    IER |= 0x12;  # s! x. |$ I: K  y+ [3 W; k
    CSR |= 0x01;  6 U: Y8 T3 u7 g6 ~  S

' ~7 s, L! W, H5 |) P; x5 `7 S) ~1 H/ {. R# K5 n: |8 y, C* y- Q

5 O6 C/ h) E4 T6 K$ y$ ]+ T还有就是两个输入输出函数:
; Z7 x8 J; i2 @0 r* pvoid output_sample(Int32 out_data)$ I$ u. c9 Z1 I* a# w
{% o/ C* \- u$ w, d  _
  AIC31_data.uint = out_data;  
: I% ?; c, d( c$ s0 n  MCASP1_XBUF5_32BIT = AIC31_data.uint;  I3 c) \- q% [7 T, K
}
, v5 R- e$ D8 K3 ]( o
; H9 ?  S! o! Q. kInt32 input_sample(void)* c' _. r* @0 S
{  
$ s6 c" U; R9 |) z  AIC31_data.uint = MCASP1_RBUF0_32BIT;' e$ W) d. ]- s: i! [
  return (AIC31_data.uint);
5 g* ]; {  o4 A$ u& I$ `}6 P! b) B$ c: L9 |

2 F, t: C9 I3 H  b' d* V
分享到:  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, 2024-5-11 15:42 , Processed in 0.038032 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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