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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
, h* J( E7 r; N$ n& W, W3 B, p8 Qmain文件:% F9 H) P$ [  C. l$ N/ y
interrupt void interrupt4(void)  
/ z1 |% l* `5 U* a1 K{4 T  ]; N, ~' O
  Uint32 sample;
' k) S. B1 r3 h1 ^* w& g) f, d' A6 n0 t# Z/ z
  sample = input_sample(); // read L + R samples from ADC( B4 Q/ I/ D0 v. B& K3 l5 F, {$ T3 s
  output_sample(sample);   // write L + R samples to DAC 2 b0 D2 o  [% l, ^) ?( u  T: K
  return;
8 g- V2 R0 S# Q}0 E5 V0 y* O8 m$ E9 {- m# e2 r
/ y; N1 j# w% `& O; g7 o
int main( void )
( W. ?, |0 Y6 D{, Y3 {# @; s* [# \8 b+ w9 s
2 r# L) @$ H$ b& H
    /* Initialize BSL */, C5 [) }& i' c4 I, _
    EVMC6747_init( );7 Y. `5 ]2 m/ G1 x$ `" f
        /* Call evmc6747_intr function */
) g& \4 ?! L$ S3 J* d! K8 [4 p2 j    aic3106_init( );" V0 u9 s/ j) `; u: Z* k/ U
        while(1);
- v, ^5 o. o& k$ m* M6 z}' J  X( [) J! }) o5 u+ y1 W$ @
% A" e5 R4 j3 R: G

* v* K" m+ l3 |, D6 f9 R, Waic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
$ X! P+ D' r5 b& W7 @! l/* Initialize MCASP1 */
. ^8 d- z! X" j. F. j- f    mcasp = &MCASP_MODULE_1;! l( \, K  x; ^  t  c$ ~8 k
    mcasp->regs->GBLCTL  = 0;       // Reset  t' h; R1 s5 a
    mcasp->regs->RGBLCTL = 0;       // Reset RX
$ x$ R2 B2 y2 L1 s! R& V3 u6 l! H    mcasp->regs->XGBLCTL = 0;       // Reset TX
: C9 w& J+ e$ r* ^, }1 v    mcasp->regs->PWRDEMU = 1;       // Free-running9 E5 [" v: Z, n; X! f3 p, P
   // configure McASP0 receive registers
' n5 m% c* k( E7 h7 u    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used/ {! s: u% m& z9 e
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' M4 F4 H# o& m! \# |& P" Q    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
2 D5 _1 z% q, e: E" o. O% u    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)  u4 V; U& j1 l' m7 x
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side); N% k6 M; s8 d4 q' `& `
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
6 H* T( T" A  @+ I    mcasp->regs->RINTCTL    = 0x00000000; // Not used
6 Z- |9 h& v6 X* E& j7 Z% }( f9 \    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! T. N/ Y/ k& w5 i( e
+ w; e6 J5 M' m( p    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used' ?; J. S* W1 f" D
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 i! s1 G: a+ T2 E: e8 _
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word5 J* Q  _5 `# m9 b1 \) p
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
) i/ Z& _- I  X    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK* O. L+ T$ E. T. [
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
: o4 O+ n8 U& ~! S" _  Q0 N1 P6 `- O    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit$ X& I6 T0 X; h7 c
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% N' b/ o: p8 T
: u* J" k8 S/ T8 u1 Q( ?( C, U5 Z, u9 q
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
+ c# Q& }/ d8 t3 t# t4 X    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
# \2 |3 ?" v9 Z6 ~1 X/ ?    mcasp->regs->PFUNC      = 0;          // All MCASPs
; R$ H. B5 K) e4 y. J5 u) Z    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1. A) b( r* p  o! _. o( e
, F; C& n7 v- X0 u) v4 i7 R2 d  C4 Q
    mcasp->regs->DITCTL     = 0x00000000; // Not used) a3 F2 r) a3 ?: O$ ?1 i. u
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
7 h1 [; ^- r; k' {  w    mcasp->regs->AMUTE      = 0x00000000; // Not used, ~. `$ D  C. Z( }
( m, t- x' j" d: G) ?
/* Starting sections of the McASP*/
+ A5 v7 `( r  l) r" ]    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; . J; o- K2 M  {# H1 I/ X
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  5 F6 z* k( s+ F8 b: q) M7 Y/ M
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; % ]+ A" H; e, j, ^% S# d
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
/ p  B4 p" h0 p& m, f7 @7 @
" e# G7 S" b) W( ^    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
  W$ R; S8 a( q9 {2 O    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );% b5 M2 A0 Z2 p8 \
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
9 P0 J2 D  D( N3 Y5 t    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );2 Q! Z9 ~5 W1 L3 ?! D. W# g
+ W9 Q6 _2 @3 s( _5 x; `
    mcasp->regs->XSTAT = 0x0000ffff; 1 V" L  ]! A0 A& w& |7 y. b7 e
    mcasp->regs->RSTAT = 0x0000ffff;
6 ]- i: i5 k. s4 l" H! u; b2 F
3 g3 {  N4 M7 M* J$ J; a    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;) u5 p- c$ b9 o% q: |' c" H
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );& h' V) u# T/ R' Q. J8 z
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
  d: k6 X! m+ k$ w0 P$ ?1 a4 G    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );8 V& m/ E1 A0 e2 q( P

0 |8 |- F6 q& t4 s( h' @4 h    /* Write a 0, so that no underrun occurs after releasing the state machine */1 v4 @9 q8 |* e8 G( {! ]8 Y8 E
    mcasp->regs->XBUF5 = 0;
9 O+ `5 u7 M2 y4 _( R    mcasp->regs->RBUF0 = 0;
" e. ?6 \3 ^6 g# M( J8 M$ v
, j5 |9 [/ \$ t7 {# |( ]    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
5 d' Y! _9 v# S! i3 u$ b3 q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );% r- t# E/ B% m5 ?1 z8 u
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ( O* Q: [, k2 x' x" a# [* s0 c0 u
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
0 x  w6 n1 O5 ~+ b2 Q, B* \1 {' u& I$ v3 n
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
( j0 P/ ^8 a; j  m% Q  x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );/ C6 [0 o) c. ?6 G- I* w% m
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
, D- J' P7 n( G7 {' Z9 ?% Q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );2 l* {4 E' H7 M& z- S3 \. Y
6 A1 `+ \2 x* o
    CSR = 0x0000;5 N* T% O( E5 S' x" Q4 ]# E6 Z9 ]: p
    INTC_INTMUX1 = 0x3d;
! Z" Z6 b8 W! P( l/ z/ v: H5 O! e    ISTP = (unsigned int)vectors;
' M5 b% R* R4 I8 g    ICR = 0xFFF0;  7 d3 v& P9 q) V3 X+ K  T" z
    IER |= 0x12;  4 X9 k7 z- a" ?7 H. V& s- Q
    CSR |= 0x01;  
+ K5 v. \- @* N; ]8 [% o- L3 X3 E, ^1 U2 l; t& _' b5 X
& `8 s" J! n" D5 e2 z
' {' i8 {9 T, F- L4 L' _! I# j4 O: a6 v
还有就是两个输入输出函数:8 h  V' q8 n( M) s0 }5 j/ \- P6 U
void output_sample(Int32 out_data)6 d- j* Y0 c+ J* {( ^
{6 R2 F  h) z9 B7 \
  AIC31_data.uint = out_data;  + i) E8 d: s% u6 l) {# R$ ?. C
  MCASP1_XBUF5_32BIT = AIC31_data.uint;1 W. U# [/ W0 X- Z$ J9 r. F' g
}
* e: R  ~& D: E" Z) Q# c; K
1 K4 F' ^) r) a( NInt32 input_sample(void)
% o% h7 S* q5 @& [3 Y/ k5 b" l{  
7 E% X4 B9 Q8 Q) ?, e# e, e8 a  AIC31_data.uint = MCASP1_RBUF0_32BIT;
) V4 b, N0 S& [. W- y' _  return (AIC31_data.uint);5 D" w& z3 _$ n
}
0 H. M" u4 J% t% k% d8 P8 {/ _: J
; q- E& y1 a3 X. p
分享到:  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-3-20 20:49 , Processed in 0.041432 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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