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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:) A4 P" T1 h8 c* s6 w  n' l
main文件:
; ~/ r- u( u  P9 W$ O* V# Kinterrupt void interrupt4(void)  & n$ s# E* \+ W5 ~& y4 c
{+ i+ B1 m# f# N. a- _# C
  Uint32 sample;3 w1 p0 I' N6 ?0 _# ?' U
  b1 l4 T/ p$ Y& R7 n) J
  sample = input_sample(); // read L + R samples from ADC
3 c) s* w3 z* @& n! S  output_sample(sample);   // write L + R samples to DAC
4 c, H! p! m, p  return;# A/ Z) ]) d* s! N# o/ B# w
}
( k8 A7 {2 L7 z; L) ?3 |6 Q( `. ?2 K) o; j  b
int main( void )
" R: }2 Q2 h0 K: h. d8 ]2 @) M, S{- W# F# V* i6 @9 Z1 ?' C  Q
6 j1 N4 P% K+ i; _
    /* Initialize BSL */
* t: w) R( N: C2 x) ?. c0 f1 t    EVMC6747_init( );
" ?/ p& w: f/ ]        /* Call evmc6747_intr function */
: N/ R1 K) w6 ^  g; x, g* N% Y# T    aic3106_init( );/ V9 O/ w) _! T" P0 g# X+ L
        while(1);
' O# _+ \4 [: n9 s}
" z$ J( v$ P, r  O, i4 r
9 a' [9 d( Q- L' _! U$ s5 {$ H) M4 t7 i5 I! ]
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题. a) D# |' z' ]# |" Q# T3 ?% K, Q
/* Initialize MCASP1 */$ S+ j" `+ L+ J3 P
    mcasp = &MCASP_MODULE_1;9 b8 D. K+ n+ V* S9 H7 V
    mcasp->regs->GBLCTL  = 0;       // Reset+ x6 w8 F% k) @8 H0 X3 A- q: g
    mcasp->regs->RGBLCTL = 0;       // Reset RX
0 |& d9 N5 j; ?2 q. ]    mcasp->regs->XGBLCTL = 0;       // Reset TX
5 e4 k" q" {4 I' M% p    mcasp->regs->PWRDEMU = 1;       // Free-running
+ h4 @% s) ~6 |   // configure McASP0 receive registers$ W2 g+ u3 N& W
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
% }4 n7 `8 j7 E1 ^- e0 T    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- K' q& m: P) {2 L" P    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word. o2 O0 Z) ^7 X2 u
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
* H# r: z% {  }0 Q9 ~* _    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side): h% v  o" Q" a$ H! d" u
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
8 B* s% O$ E8 L7 x, {+ C# ?6 m    mcasp->regs->RINTCTL    = 0x00000000; // Not used- o1 N/ A& y. ~% j
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
9 d- X8 I- K) q: |
5 B3 U$ q; i$ }! `7 Y    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
9 |7 X( `7 `+ u4 f    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus6 r6 m. s& z, x2 }# e' g
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
9 J& A8 h; T. L- N    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
0 ?, I$ S) a: L3 }) W! W! [) p7 y9 G8 {    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK4 y; r  Z5 u! Z% D' i) {
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1- J: {* |- T+ ~0 f0 g2 |
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit( L: M! O! s  o  o
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' s2 [9 b& {( @. O, H" f3 f3 f' e+ C0 p( {6 u, }
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
  a: ?% V0 m4 ]4 R* ]& n& f    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT6 O$ a% _% o) |3 |
    mcasp->regs->PFUNC      = 0;          // All MCASPs" o/ v* v* j* d' l$ [
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
" Q2 R( I1 \! F% Q1 J% G! `
9 \3 }  U4 h; x' w* b! u* ?    mcasp->regs->DITCTL     = 0x00000000; // Not used9 x0 R9 y3 e1 `6 W
    mcasp->regs->DLBCTL     = 0x00000000; // Not used) j7 ^0 S! e1 `8 T* O2 q
    mcasp->regs->AMUTE      = 0x00000000; // Not used3 s* I/ Y7 I& b% y

9 U/ {6 V" K! u& {' O5 P6 Q: A. `/* Starting sections of the McASP*/5 g) ]+ `' P# n% }3 P  X, t5 F
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
1 h% q/ p9 L* N. O6 U  L    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
6 g) I) v4 v3 C8 Z! N6 r" I    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 0 y/ X# ]3 F) j  `, b$ J+ s
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );# ?& m2 m- }& S( I) f& G# i

* A. O. E0 O4 w. P( R: U: `  a4 U    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
" L9 V) V7 I: {% X    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );9 I7 G/ p# P) i  w: l
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 5 Z$ J  H! d' p! I" K6 ~
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
' q+ J) @2 z% w
6 [3 f. D' f" s' ]$ O    mcasp->regs->XSTAT = 0x0000ffff;
+ h; B0 a1 l& I, q: [    mcasp->regs->RSTAT = 0x0000ffff;
* R5 t9 j) k( n* G
2 ^; G* C- _+ J. W  e. o    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
& e2 @. a) {4 f6 u, O* t) m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
. a  L' A) C- f" s    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
$ I: A8 p3 W5 |4 w& k9 h    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
$ Y* y- }) f4 C" S/ z) l
2 O& i! @) z( Y$ @5 V0 n; R3 C    /* Write a 0, so that no underrun occurs after releasing the state machine */
5 Z! K3 `& s6 h" {  |    mcasp->regs->XBUF5 = 0;. s( v2 O+ t, ?8 L4 x% ]
    mcasp->regs->RBUF0 = 0;
+ ]4 ~1 Q) _% J
: _; Z6 u6 b" |. a    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
5 J. \- @# @, }' B& t    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
  M" k9 C: [6 ]+ ~2 ~8 m* ]& d% J6 a    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; - o9 N+ A# t& s+ W& ]
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );3 m( M0 M1 P. g  E( R" A

& n% Q. G5 G  j* ~- n; J0 P    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; - q$ [' @' q4 x+ {3 t) L
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );' q7 P( [& X! C: y
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;   U0 a; ~6 W  v: g) \/ V3 B# S
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
3 f. X5 ~) Z7 D2 [) c
) M9 {4 {( e8 @3 r    CSR = 0x0000;
7 J2 y# L  J- q0 r6 p: e2 H    INTC_INTMUX1 = 0x3d;
  F# p# v' A( V, e( i8 n8 ?1 ~    ISTP = (unsigned int)vectors;
* Z; W; O) a+ R9 [$ b    ICR = 0xFFF0;  
4 ]0 @1 r! ?* u) ~    IER |= 0x12;  , |/ l& D& R0 X; N9 x
    CSR |= 0x01;  1 c* S# r6 n, g5 Z: p4 d
9 |9 z, O- r( E' [3 T; r5 k

" F; y$ }  B- j& X  b
+ p. `1 E0 [) C8 J还有就是两个输入输出函数:# ]; a/ N2 r& K! N$ {2 B5 [7 q
void output_sample(Int32 out_data)) f6 B9 P) x$ L, Q3 G! w
{* W1 r3 e) V( ^" I) t
  AIC31_data.uint = out_data;  
, j3 Z( l4 l! L9 K  [2 Y3 ~  MCASP1_XBUF5_32BIT = AIC31_data.uint;# J7 P6 v3 F4 w7 C
}
9 c+ I6 Q" J) I2 s/ E. R' i2 w. c* W1 `
Int32 input_sample(void)
! u7 c& ]# A' H8 }" c{  
' G0 s5 p3 D, {' R8 b9 a% k# [  AIC31_data.uint = MCASP1_RBUF0_32BIT;1 ]8 R6 _7 s! ~) P( k" x
  return (AIC31_data.uint);
1 h$ J: v) S3 M, s' C}& \" o2 q# D4 [1 `6 ]

1 `! e' [# C' f# g$ s+ j; E
分享到:  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-19 17:18 , Processed in 0.044079 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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