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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:. e& ]' c7 }# D
main文件:
0 ], P; p3 e3 k8 u: Ointerrupt void interrupt4(void)  
( w5 V' P' a; n) b5 }5 \! Z{
) g% Z" u6 u& L, z, W  Uint32 sample;% D9 U- I. `: R! ?+ C3 h5 n/ h" S

* i8 Y  a% h2 c3 ^$ v  sample = input_sample(); // read L + R samples from ADC  ~, T6 V2 ?7 w0 D& {$ U" W# A
  output_sample(sample);   // write L + R samples to DAC
" C% E, t6 H% r4 j7 o5 f  return;0 {* K; }2 F, G% `+ b( Q, P
}
8 I# b4 g$ y" _2 f. G8 S) M4 w& D
, C( L( U  j( o- b9 Qint main( void )
% M4 ~3 a8 o5 I, i% P4 B{, n* h9 t  N8 s* w7 y. i) I+ p
& }- S9 i2 Q7 g) [) V4 L/ q  f$ l1 s
    /* Initialize BSL */$ ^( m. o7 g; D1 M
    EVMC6747_init( );! Q5 ^4 Q! ]1 A! G" W3 M, T6 z
        /* Call evmc6747_intr function */
. y; s( V/ {* X    aic3106_init( );
; @/ j& A# i3 v, V  a3 f        while(1);
  ~' E4 D! A2 \. q, J}
' ?  F7 W/ G( Q0 W& T$ \$ n' E: W+ S
2 i$ a+ G) Y. w1 u8 L/ ]/ t+ i4 l, E
+ H! G3 K/ W) L9 U: V, q7 F. jaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题0 y! p, q# g- [9 [& w4 @5 L
/* Initialize MCASP1 */( c0 Z( l. ~8 v6 \' `2 C  Z
    mcasp = &MCASP_MODULE_1;
. s( B% J% p3 K  d$ ?0 w7 Y! u    mcasp->regs->GBLCTL  = 0;       // Reset
& Q" y* ^# c/ Q; E    mcasp->regs->RGBLCTL = 0;       // Reset RX
$ M5 f* F8 D$ O) P3 c- T+ _" r* d    mcasp->regs->XGBLCTL = 0;       // Reset TX
  S6 ~5 y/ N& q# b+ P1 r    mcasp->regs->PWRDEMU = 1;       // Free-running! o- b* x4 o- P  D, D$ ~
   // configure McASP0 receive registers6 i0 P$ f: t1 k  Y* B
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
- z8 {/ e1 `3 ?8 u    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus  U$ {9 M4 _& {6 z3 N; L+ U- o3 m; U
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word. I7 J7 o9 b3 x. N( J
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
2 v: g5 x# E7 P5 ]4 q" \    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
9 u) ]( |: P7 l9 `  z! [, F    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1& [, e8 X$ P4 i7 ^  ^0 b
    mcasp->regs->RINTCTL    = 0x00000000; // Not used, m! f3 \0 e8 Y; v" `3 }
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256# h/ }/ a# g4 `% F) p# A
" J& ^7 P4 q+ c# ?) [0 A; C+ k( v
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
4 O8 p9 T, W# I/ R/ g    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 e( x  Z4 F- ~    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word2 }9 V! k; A7 v; b+ g; W
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
8 K* q2 p/ D% A. p! N2 ~3 n0 R    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK5 P, a5 @% H# @- p+ S
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
* S7 i/ f4 h6 o+ H" _    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit5 y& X% H1 A! w2 E4 Z
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 M. V0 W. D' R3 [. L  L
5 X& `/ S# |6 `1 d    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN9 ?1 S+ ^$ o/ X, ?
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT, |  E0 o# S+ D/ ]* H8 g! @* q( \) r
    mcasp->regs->PFUNC      = 0;          // All MCASPs1 v- \3 s$ `3 g* ?- v( X
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
1 }& F/ D1 T7 o1 t4 Z
% y0 a/ H' X# U* N4 {, b" g    mcasp->regs->DITCTL     = 0x00000000; // Not used% _& |' u% t$ @* L
    mcasp->regs->DLBCTL     = 0x00000000; // Not used: L2 o1 _4 V; K" y  Q& Q: T
    mcasp->regs->AMUTE      = 0x00000000; // Not used- _  f7 Z# x! z3 T4 X

; b( q; F! A0 y$ ^/ h$ B/* Starting sections of the McASP*/6 u7 U" Y5 E/ K0 J4 s4 g  Z! N
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
4 M$ l. |! f% w0 }    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
& V, P% S- z+ r* ]# n$ i  K    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
. P4 E$ `. i+ [% F: D9 V8 h; O    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );" M8 s# m# ~. T
+ t3 O! d, }/ @$ a  y0 y5 q; ~3 _" Q
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
5 `2 j1 u: W+ C/ k$ I    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );& C' i& o1 |) c2 r+ x
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 0 {% F6 M' ^5 c' p- D% I/ D! X" B3 J
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );4 z) r) ~7 d) O; x# ?

" |/ H8 {( _- K- ]    mcasp->regs->XSTAT = 0x0000ffff; ; [& \3 p. `, `
    mcasp->regs->RSTAT = 0x0000ffff; ; u) i" y; d& A/ U
9 M* x" b' R1 L9 P" Z
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;2 G$ r, f0 y, y" _! m* a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );. d5 F% v4 z  V& T0 {6 J
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
8 m4 u$ B4 c9 }/ z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
8 W5 v' Y5 o% r3 U$ C; P. i
, w3 G2 E! F# v+ v8 i" A    /* Write a 0, so that no underrun occurs after releasing the state machine */( ?. r' p$ Y) [. M. S/ J( W# {4 I
    mcasp->regs->XBUF5 = 0;
- W; \; l; d9 X! R/ P* l    mcasp->regs->RBUF0 = 0;
$ \  d, y: R/ \  A0 }8 v! q: x
: ~3 F# A/ q& }. S& h8 `    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
0 s' S: e2 Z, a7 g& ~8 Q& y& _, H2 ~    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
* X0 T2 ^8 H- _8 G2 Q    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 3 `8 K4 e1 |# r2 s2 G/ Y* r/ N
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
" W6 t7 X: {# g* @* S5 j& Q; {) [( i7 A( E6 a
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
/ q0 {% g0 k& b+ X1 r( g    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
1 H: @5 E$ h, q' B" e% y9 K    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; ! @1 s* y- @% o* R+ F, e' B9 T
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );' m) O( H- S% z( j. Y. b: J* h
8 f1 a! N) H& J1 P* @0 E
    CSR = 0x0000;& Q  Q( Y" O. w, e$ a% @
    INTC_INTMUX1 = 0x3d;" Y! ~( V  g' W2 j/ n7 [  ?: z: E
    ISTP = (unsigned int)vectors;
0 l6 ]+ F, Z+ j' U& R; V4 `    ICR = 0xFFF0;  ' h& j8 w' A2 L" J+ Y
    IER |= 0x12;  
# @# j# l1 |0 B' t    CSR |= 0x01;  
2 p2 r- n  \0 b% S' o# X
: X- b1 _9 j% q: x; f. D5 D/ z  z3 E! }1 A# B: N4 [
1 ]: C0 ?7 i- Z) x
还有就是两个输入输出函数:1 _, q+ D; z: n
void output_sample(Int32 out_data)
! C* k! r0 w4 R* ^+ u/ F( a{4 s) v" l. @2 k
  AIC31_data.uint = out_data;  3 G. k' }& \$ F3 E6 o! k
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
6 m: H! A+ M" n' f* k  A}
! C2 X3 P# h# R7 @$ j$ z4 d  m+ N! A( f  Z( y+ i& l" O
Int32 input_sample(void)2 P: C+ j2 ^+ |) i+ f: O. z
{  ! v) r; u# u5 D; v
  AIC31_data.uint = MCASP1_RBUF0_32BIT;( t% Y8 ?9 g1 X* s5 {+ g
  return (AIC31_data.uint);
8 O/ i9 G- k& g9 [( C}9 P5 Y5 g9 L9 Q; p" @9 U
+ H# _# s* {: j6 p1 E+ C
分享到:  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-1-3 03:48 , Processed in 0.044216 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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