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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
5 j2 D$ ~2 R  I' t( ]* Ymain文件:
2 L, F4 j: d* X  O& e3 Jinterrupt void interrupt4(void)  0 u; e+ E# n  t2 Q9 ^$ Q4 _6 w
{( d+ j: k1 v2 ?; W
  Uint32 sample;% M9 A2 N2 e/ h- e) K% f. _$ D# q
" h( Q0 ~7 ]" V7 I# _! L7 x
  sample = input_sample(); // read L + R samples from ADC0 g3 Y& I6 r4 V: a! Q8 s( _- _
  output_sample(sample);   // write L + R samples to DAC . m1 }/ G8 _. j3 I* n. s' k- t
  return;8 m% j+ f' V& \! ?# d
}
; n- W/ h1 s( F4 ?  _  A$ y  k6 K: A9 q% }- y; S9 j" ?9 V3 |( H
int main( void )8 c- P. ?$ Y, k
{* M) j" G7 l& H
' `9 r7 ~. P/ I; {5 o$ N3 H: y8 ^
    /* Initialize BSL */, m9 n" W) z  C/ t: Q8 U' j
    EVMC6747_init( );1 I2 g/ r6 D4 g0 E+ X( [  R0 q
        /* Call evmc6747_intr function */6 g1 [: N& l8 i
    aic3106_init( );$ U" H- H+ `$ o
        while(1);+ z3 T' |7 `8 y0 e: r5 s4 L
}
( F$ q, }# S' [
, M1 Q( n# N; M  C$ s7 r1 Z" w+ @
" B' [9 ]& ^, @1 Eaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题* [6 `9 u4 u' x
/* Initialize MCASP1 */
7 M/ T0 R/ n7 T3 e! r5 m+ h5 F    mcasp = &MCASP_MODULE_1;
( u6 o8 M9 f0 g/ L3 n1 z5 |' v    mcasp->regs->GBLCTL  = 0;       // Reset
/ o) y# `+ T0 ?4 |    mcasp->regs->RGBLCTL = 0;       // Reset RX
. L8 e2 P  S" n) ]: E. Y- K! H    mcasp->regs->XGBLCTL = 0;       // Reset TX) L: m3 l$ L6 ~3 }/ Q
    mcasp->regs->PWRDEMU = 1;       // Free-running8 |* s6 [. x. U) l9 F7 q
   // configure McASP0 receive registers8 c- v4 I" N8 i  ^+ X! s
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
7 O6 R4 x, z$ l7 G! P* e/ W) b; q    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 y# M1 m. t+ t% Q# V! t5 m$ B    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word; e0 R" M1 T, t6 f) K
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)7 O  _+ {. z) U, e3 l
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)& N6 ]. q+ I- F; u. _9 f
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
' R3 n9 g+ ~  }. b    mcasp->regs->RINTCTL    = 0x00000000; // Not used
' A0 Q. F" r/ d5 B% W    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 N# G; X, J" S$ G9 @1 ^# ?$ u6 U: ?" E" c, x
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used# F# E/ b* d2 a4 d$ y1 x
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- t' c9 A2 f" S* D0 ^    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
2 R1 d7 i! a* Z    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
, E! F% \5 u0 S1 [: x; k    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
( Y* B; w8 a* S* J$ b9 m* e; B7 Y* [& D    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1( C8 U# H( x. l- {! f8 U0 c
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
( k8 B2 Z, |3 Z" c    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256+ S# T- e0 k! w0 S
6 l" a, b' h6 D1 C, N7 g
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
) Y2 I- ?( l$ J  U0 Q3 T3 a    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT/ R4 n  N; J+ {7 P
    mcasp->regs->PFUNC      = 0;          // All MCASPs; A* ]" B. x6 d- U
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1" N( O) l' i" {* ~4 Z- ]

! F' B. ^2 J8 \    mcasp->regs->DITCTL     = 0x00000000; // Not used
5 U; r5 A# g+ K% q  j- h    mcasp->regs->DLBCTL     = 0x00000000; // Not used
1 F! e9 T* l2 j0 \9 k% o- t) K! j: I. D' `    mcasp->regs->AMUTE      = 0x00000000; // Not used
% t& O5 M. p  y! _. h+ _4 ~
- ?7 k, Q4 h; o! Q! _$ [8 k/* Starting sections of the McASP*/
6 Q& a6 J& R( t: V0 J, ]    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 5 U3 ^; b" o# s5 a  W) t+ V3 M# N
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  7 w5 D0 k) ]# C5 n% P1 h, `
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
0 d3 @! t3 ^6 z" E0 I9 L2 B( V    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
) R: y! b# X4 H5 A
4 D. s2 P8 [6 ]1 L3 h    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
, k/ w  V. |7 X7 @( D* Y. n- W    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );- u2 c9 y3 L/ S* X0 x. o, Y% P- p
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; , G7 \6 K+ @) m1 b# L
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
; t  g- d7 `* g4 j
" U3 F( B$ l& U3 C    mcasp->regs->XSTAT = 0x0000ffff;
4 y0 _9 c+ @  g1 t0 x/ d    mcasp->regs->RSTAT = 0x0000ffff;
- j. s( M& o& U# B5 {0 F' D
' [# S: W& |: m    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
5 W  X  f+ p% r- \' V' s    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" `0 k/ v- R, {  u- M+ i: M8 ~    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 2 L  `3 j0 q  R6 ^
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );9 `( S9 q1 l# `* W8 |0 P
! h9 T5 n% y1 N+ y. j
    /* Write a 0, so that no underrun occurs after releasing the state machine */8 a7 Q/ T' o$ q  F+ H  ^
    mcasp->regs->XBUF5 = 0;
1 a, A* D7 o) I5 ~5 r& k    mcasp->regs->RBUF0 = 0;
9 y/ V% t5 }7 P! p- D" a6 ]1 S/ k$ [% H8 U3 A2 W# t7 ?; {5 N# v* z
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
/ G# K9 e% I* D8 C; @' |7 f9 r% p9 j    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );# ?( P: l+ @$ e0 z  }/ r( k$ o; ~
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 0 S* s# J2 ^( @8 S4 {
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" s4 c$ _& q1 s: U
, h9 k! G7 \! R: X" A
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; * r  F  \) P* {0 s: K0 K
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );. _) q. U0 K2 l$ U2 x0 @& O
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; - a4 |! O& a* ]$ L+ `9 y4 _
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
- m" d3 k; b1 o. y/ S; I# F2 h* {4 S! F- M" U2 L
    CSR = 0x0000;: n6 P$ ?( i! R. ?/ \' B" c9 }0 |
    INTC_INTMUX1 = 0x3d;' y) L, e4 d* X. L3 F3 I) U
    ISTP = (unsigned int)vectors;9 n7 Z5 _( p7 X7 c9 s/ `& c
    ICR = 0xFFF0;  7 ~0 {+ M/ D9 x& `0 K; M8 j  P
    IER |= 0x12;  
( ~% U! N% ^1 c8 I9 g; W  W" k    CSR |= 0x01;  - G, ]3 O5 s( I
2 p) I4 H# Q& H5 X- m
) s. t$ r( C7 L7 X, V  `2 H  o
7 s( ?- C+ F% l1 A# Y5 X/ k
还有就是两个输入输出函数:
4 r1 i7 N$ o. _% O* svoid output_sample(Int32 out_data)
# C! w& r2 s. O2 R" `, C{0 X% z' h) B% q6 m" }% s
  AIC31_data.uint = out_data;  
$ A- o% b1 g& s9 S6 B" ^  MCASP1_XBUF5_32BIT = AIC31_data.uint;
: a( z7 R- L: h}
3 O) |$ r% Z7 w1 X. |! n& d. K; ]. I6 ?: R$ \6 o) ~2 d2 A3 y
Int32 input_sample(void)
" E: Z/ e% I3 d8 ?2 c+ Z{  
4 a# {/ m( x4 Y  AIC31_data.uint = MCASP1_RBUF0_32BIT;5 Y+ z% b, C: w7 g
  return (AIC31_data.uint);# _* x) a$ p+ ~% w. m/ o) J. K
}
1 l$ t3 z7 e1 c+ [; O8 d
' N9 U  M; E, E$ k8 @$ f1 f/ H* O/ u
分享到:  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-6 02:42 , Processed in 0.045200 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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