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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
- p) q+ G& E1 M; T% rmain文件:
6 Q. W( w/ c4 s  iinterrupt void interrupt4(void)  
* W7 z! |# J! a( B8 Q& C{
  C! e" R' N& C) b6 j% w  Uint32 sample;
  T& i) Q% d) s7 N
( X2 w& Q, r4 p' M& r& x( |  sample = input_sample(); // read L + R samples from ADC2 M! F# {! w' `: J4 x8 M6 V
  output_sample(sample);   // write L + R samples to DAC
2 u9 `! O, |) D8 f) |, h  r, J  return;
4 F% B: U  M6 S! P7 n4 G0 H% f}; k% {& J1 x8 _
4 _5 E# j7 c) Z4 \' x* ~9 X
int main( void )+ k( @9 }+ y$ q8 {" n) w. C6 d
{# \, V$ l  S" H  M1 J9 D+ ]& D( d

  {( \: b% U1 @) ^7 _2 f. g6 }( B    /* Initialize BSL */
0 U" L, L" D4 x. f& t9 u. C+ i2 d    EVMC6747_init( );  J2 o1 P; J8 ~! X. A) Y
        /* Call evmc6747_intr function */
+ ~0 X4 e" B$ W# S# k    aic3106_init( );" g. r* R* _4 x
        while(1);
- b: v3 o+ g* U* x: `+ t}
9 |5 m6 S% o8 W- J, e9 k) b( N' F1 _
+ a+ f8 [' }( U
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
5 E" C9 S! P. N5 [; s+ E# Z! \/* Initialize MCASP1 */1 g7 }* G& z9 d5 v) a
    mcasp = &MCASP_MODULE_1;4 c  k. {* R' Q' T& ]$ T! z" z
    mcasp->regs->GBLCTL  = 0;       // Reset
; I  b8 [4 [, z3 U2 I0 \2 a: e    mcasp->regs->RGBLCTL = 0;       // Reset RX
6 V' ^4 ?& e* c7 H& r    mcasp->regs->XGBLCTL = 0;       // Reset TX
9 }9 i* O5 _3 \5 f    mcasp->regs->PWRDEMU = 1;       // Free-running
9 {. [. K" ^; [1 @   // configure McASP0 receive registers
" h1 l2 R+ r. \3 ^    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used; m9 w( h0 W( J; H- O
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 v! y- D: ]/ K- d4 l
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
! {* T8 n  o2 O$ q; X; Z    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
4 b5 g# p( y% F8 P    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
, O- e5 a% K+ \: e6 H* I    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
; I) U& J& u5 P& }) ^- p; ]    mcasp->regs->RINTCTL    = 0x00000000; // Not used) W5 T, f( b$ i. J
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! y! _* P5 ]  v$ U; c

- {+ }, j7 a6 r    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
3 q8 D7 B* u9 Q8 x7 Y    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 r% u2 c) m% h  x    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word# U2 i( \$ b6 V# R
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
4 o1 v, j( c6 {0 g; j' E/ h0 S: {3 k# }    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK$ }: k) w" v; B" K& f7 W
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,14 |* Z8 C! v( V) r. }) [/ N
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit! j' ?1 K4 D; I' ]
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
8 C' ?$ ~% Z0 A! i3 r9 ~6 H0 i1 t9 ^% k/ M% A
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN) X3 r, T% K; E* b4 o
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT6 y& Z5 |5 J8 M8 i
    mcasp->regs->PFUNC      = 0;          // All MCASPs$ l9 u7 K/ ^8 i$ C( Y5 Q9 c2 c/ y
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
# B2 t0 }( a. h- R) i, A$ X6 }' M
' b" A0 u( W, D  E. b( B. O: w/ P    mcasp->regs->DITCTL     = 0x00000000; // Not used8 T2 \# a0 ~) o! p, t9 ^" \2 f5 }
    mcasp->regs->DLBCTL     = 0x00000000; // Not used9 N2 [8 Y( c1 I: F% z2 p% A
    mcasp->regs->AMUTE      = 0x00000000; // Not used
) {0 B9 e5 e& |. l! [) a' [5 @; x/ P, ]+ s& A
/* Starting sections of the McASP*/& @( o0 Y9 |9 q. p
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
4 S1 J5 ?. B8 T( l    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
5 ]. j2 t6 i9 T* o    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
5 E, B5 }- Z2 Y: R7 I) c    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
4 e0 |' b% Q3 v! j) t! k, U. F, U2 K$ H# |- X& ]
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; * d8 J/ P" S# ^/ x2 Q7 {0 p
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( _, K* |1 x9 u. P% k
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; & Q/ g; ?0 J  Q- E
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );: \) |3 h9 H7 p2 c, h- A) n" C$ p
5 T; s( ?+ t0 e7 f
    mcasp->regs->XSTAT = 0x0000ffff;
8 R0 i  w. l) i5 w    mcasp->regs->RSTAT = 0x0000ffff; ( f) {: |# m- D: K4 {
5 c( v6 f3 h& V' Q) r& s; E
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
7 p9 [# G5 M4 V" m( {3 E8 F    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
4 V, [+ `! v- u' C1 }    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
; i, c4 d- a" F3 a% h0 R# {    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );( J. p9 f! @+ F* K* X. _) a$ S

) ]; `6 R- ^6 _2 `8 o* I    /* Write a 0, so that no underrun occurs after releasing the state machine */
9 z# U" @) [1 u  o    mcasp->regs->XBUF5 = 0;- H7 r) W' G( J  V/ i( y6 T8 q- S
    mcasp->regs->RBUF0 = 0;+ N" X6 W& @, ~. [* N0 G9 i

7 d4 G; I: b8 A' x" G4 p  F( S. h    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; $ M4 B$ U2 T) z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
# }+ ]3 ^* u& v( {) u. V    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
2 N; x# C: b2 E    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );4 L/ D) D2 z  j" |
2 g) \2 q. L+ C3 e6 C6 z
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
4 X* Y3 C, l* s" l/ D    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
# C  a4 |3 }2 f) N& F2 S    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 1 B& h* o$ K7 B3 J% d* W
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );. |9 G% Z5 Z4 }- p4 ?: n* Z

- V- Y6 r4 j1 b, E$ F7 Y, v  s5 r    CSR = 0x0000;# G! d; p5 G* a9 ]. ^% V% j# _
    INTC_INTMUX1 = 0x3d;. p1 n6 X& o! y/ H
    ISTP = (unsigned int)vectors;
& M6 {3 S/ h, p    ICR = 0xFFF0;  
- K! T" C! H. T. `& X( `, ]$ b    IER |= 0x12;  
! u% O' t# H# n9 C) N3 |    CSR |= 0x01;  
) k4 b3 m0 R" W4 {4 j0 L+ b; G% b6 z0 W8 n5 S  ~, O8 r
; S2 f% E% u  D

- P1 h. Z- |1 M  b还有就是两个输入输出函数:* A( W1 t% a% _) c+ s! g, {) K* K
void output_sample(Int32 out_data)
+ A6 T% q# {. Z8 z3 W; f{
# v0 r6 }% i8 i7 c; W; `5 x# [  AIC31_data.uint = out_data;  5 P6 E( N* u1 t/ U  \& o8 K
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
/ |& K  o5 N: G; f8 ~( l( i}
7 L2 [' N& _8 D- a5 g8 E6 X, Y
' B" \: \: S+ n3 \3 y% yInt32 input_sample(void)3 h( _* A- l! A5 i4 n
{  
$ N1 a) U5 W& V7 S5 ]  AIC31_data.uint = MCASP1_RBUF0_32BIT;2 u/ N2 ~* E) l9 |7 ?& z
  return (AIC31_data.uint);
  e) i5 D) p" q& Y! d1 q! y+ d}' A5 l" K; V" z! D& S" }8 B* N

+ Y: n; p% s3 x( h5 G0 J
分享到:  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-6-17 07:25 , Processed in 0.036735 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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