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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
* r* n0 @& \! _3 U2 bmain文件:
* I2 w2 W2 m4 Sinterrupt void interrupt4(void)  
/ |7 L4 K: \& t( o* d{' Q" o$ o5 |9 \) A, Q+ z  ~" D8 L
  Uint32 sample;
7 U  V7 ^4 u& {( v
  `. B. E  D8 s- A3 Y  \/ N  sample = input_sample(); // read L + R samples from ADC" K$ B( C2 N) Q- n/ ^
  output_sample(sample);   // write L + R samples to DAC
7 P3 j8 v8 h7 s" I3 o  return;) f( u/ @' X0 w0 q9 u; Y
}+ \/ H, g' i1 ~/ g( ?4 F7 I+ [
% x3 ^; ]/ p+ T+ {( q) j
int main( void )% @) X  ?6 n9 r: j3 M# X) I9 J
{* A( m3 H4 {9 V3 Y6 ~

, H% ^$ k" b' Z- c$ I5 d2 D    /* Initialize BSL */
5 A5 R. ?( ?# p8 {/ k    EVMC6747_init( );, G1 L. |; f# h, h
        /* Call evmc6747_intr function */
# p* c7 J' |% l    aic3106_init( );) r" s1 S6 F# f" o& Y+ A, A
        while(1);
1 D+ v& B* _1 H! m" J+ i}& D4 z! |) Q) T

$ t2 [5 T# ]9 d" H
! m7 N* b: l- a; ?4 B2 L1 e) Saic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
. ~" ?: {5 n: i7 y/* Initialize MCASP1 */
+ B# t& i! S. ^: }8 [8 y    mcasp = &MCASP_MODULE_1;
" [$ u$ Q$ V: N8 V0 d' E" q    mcasp->regs->GBLCTL  = 0;       // Reset
; a  o$ t0 ?8 K' s0 s9 ^) ^6 }    mcasp->regs->RGBLCTL = 0;       // Reset RX+ C8 ~* |" L* w# `% k
    mcasp->regs->XGBLCTL = 0;       // Reset TX& D6 D) y8 p0 `% y6 v
    mcasp->regs->PWRDEMU = 1;       // Free-running
4 m0 t, e2 p$ @2 G/ M2 o   // configure McASP0 receive registers
. h- f+ M6 i9 W' j    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
  W4 K9 K2 {7 k  j" \6 J4 V    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" J9 D, M$ e3 @$ g. K$ f) c  G
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
) l% T6 C) {3 A( D6 h; C    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)% u1 I9 D( f- p, a! F, l
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)! F" X% w; k* l4 v9 [% G
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1; s" k. c* @. r$ X" u: N
    mcasp->regs->RINTCTL    = 0x00000000; // Not used* h' B) ~% B+ y, [- d$ s- H
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' c) X3 L; ?1 `* `2 r7 s2 g8 E  x+ @' q0 I  d7 G$ D. ]
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used3 w  P4 Y1 q: `: X; M
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: c, H2 B8 r. ]* h% u1 R
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word+ x: }/ z" B; ~4 T2 P) Z2 r
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-162 A( t" J% |/ ~3 R0 M( ?% y9 l( F
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK- M" A4 W5 z! ]3 D$ q: s
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1( i5 [  B( M7 G' r
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
2 j- N& @3 M6 v3 N6 Y! L$ K    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& A% z4 y; h  N

6 ]/ h0 i, i- ^& O! d, l    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN2 F; T7 d8 r* s/ J4 c
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT3 @# F8 V! D5 U# y
    mcasp->regs->PFUNC      = 0;          // All MCASPs) q0 C  ?; ^6 A1 ^1 f
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
# a# R4 O. R( E) X$ J0 `2 U8 J3 k
  H! E3 W) ^, t3 O    mcasp->regs->DITCTL     = 0x00000000; // Not used* Z# U; W, U6 l* g
    mcasp->regs->DLBCTL     = 0x00000000; // Not used' `: t% M# ~0 Z/ A0 ?0 J- ]/ Z7 n! ~, k
    mcasp->regs->AMUTE      = 0x00000000; // Not used0 {: ?  m" y4 G7 W
4 v$ E: @) m* D% B1 @
/* Starting sections of the McASP*/
% a& m) A/ d1 C. l1 L. y4 x    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 1 j0 s5 l+ ~5 P1 H9 R) A  |
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  5 m/ F  c( _! d  J( C
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
" Y2 B6 _8 J7 I0 n2 z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
+ Z& J3 X, x% J# z
( w; z! B0 Y4 Q, [* U" l% ~; \/ _4 S    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
" w1 i7 m( e0 F. ^8 o+ l4 G; k    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );, j, F) \  z& ~1 k; n
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
+ C1 K* P" t" b! `3 W    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );2 {7 Y+ z& M0 R  J  T2 o

! P& R' y. M8 u3 x    mcasp->regs->XSTAT = 0x0000ffff;
$ P* \4 {, D& C) u. {9 t    mcasp->regs->RSTAT = 0x0000ffff; 1 y( ?+ K8 G% N0 Z3 ]

9 W, b3 w0 X' g& H! k    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
; L; f" ?4 H- h: k4 s' S4 s    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
' e) n: O1 N/ w, _) H    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; % ^4 A3 u# _0 A. x9 K5 l
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );0 p- w' Y. T* A& c: s  t5 D+ r8 y

5 m$ S% F+ U/ H/ v    /* Write a 0, so that no underrun occurs after releasing the state machine */+ T- y* c+ E' W4 L  U
    mcasp->regs->XBUF5 = 0;
. q9 E% N" D& Y% Y    mcasp->regs->RBUF0 = 0;
' A! f! R. l* h: W; p  x- A! Z
( e1 ~! b( Y7 {) G4 Y, M( `    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 4 h$ T' Y  C2 C. H
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );" v6 U$ J4 V% g5 m- B2 \& u4 }
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 9 v8 M9 u; p) J6 K( V& F: s
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
* p: {# N9 r) Z' x8 \: h  _% o- w) G% `  z: A0 Q; Q, v% @# \
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; , ^' x  w8 t+ r8 b/ O2 [" S
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );% V" b3 C5 L2 X. P8 R; \* i( q7 w4 n
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 6 x) H- _( h6 g) O
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
( a4 m# Z3 P; j: T. K2 X$ \7 X0 N9 s  x# Q3 h) z: P9 ?; q
    CSR = 0x0000;1 _+ C% V& x  d7 `
    INTC_INTMUX1 = 0x3d;
- @& K, k' @; r* X: a, V    ISTP = (unsigned int)vectors;
* Y/ q4 p0 B3 Z+ A6 p" C1 C    ICR = 0xFFF0;  ) q- ~* @( E7 s( F* y
    IER |= 0x12;  
$ i0 u$ Z* ]* X" m    CSR |= 0x01;  
+ A  ^2 W5 _8 m; t% }1 h! k, O$ I. o0 h9 T- ^7 `# T
- A2 Z4 |6 p# X* ~$ Y: k& W( P
4 G- w% H! T! ~* H- L2 M
还有就是两个输入输出函数:
. H! v% e. B8 p* k% i, wvoid output_sample(Int32 out_data)/ @8 C+ z2 |; }* v* l
{4 C& o+ j4 L7 J. @  E% v! ?: L
  AIC31_data.uint = out_data;  
! o2 H6 j; m! c  MCASP1_XBUF5_32BIT = AIC31_data.uint;& b3 b, [* s4 G) @5 |: o  {
}  S2 f+ Z* o: c+ X

' Y" O3 P+ Z. ?8 ~( |  GInt32 input_sample(void)
) B) g, X+ y  V  T{  
. |0 M2 o( m, T  AIC31_data.uint = MCASP1_RBUF0_32BIT;; g, J! y0 M, w: W# h
  return (AIC31_data.uint);7 r9 J+ X" W/ u2 P
}
* B- M. S+ O2 U( L9 e; o, Q3 {8 z! R1 V# P, ~5 _: 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, 2026-3-30 14:14 , Processed in 0.039775 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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