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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:( D% y$ ~, S; w& u
main文件:
/ \$ g% I0 _  q) {  Q5 o4 pinterrupt void interrupt4(void)  
* A7 L. c% _7 V/ v0 l$ G& x# [) d{
1 G* o- ^; c6 P+ L6 h. }& O0 H  Uint32 sample;5 z9 y( n; ]2 [) j2 j
/ ]$ |3 k$ Z' U
  sample = input_sample(); // read L + R samples from ADC
; R- ^5 A1 a& N  output_sample(sample);   // write L + R samples to DAC * f# }7 V+ q- X" i; v2 g; B& c
  return;1 {5 N; G$ q) ~& K$ ]
}
. j( U4 {4 k- e) h1 E' f5 ]; m* i: |3 T
int main( void )
4 s- A3 @" r4 G, V0 `& ?9 x{
3 l# l" r3 }( G3 b' y* W2 q. J
) I  K( t9 n- |9 K" A    /* Initialize BSL */( g, i8 Z' p' G; S8 E9 {3 H
    EVMC6747_init( );$ A: R+ F/ H  K$ V! _1 w' O3 u
        /* Call evmc6747_intr function */7 M0 z3 K+ @  \6 k- A
    aic3106_init( );% v6 H/ p" K6 N; w9 s$ d
        while(1);
" `: S3 ^: \/ ?$ f. ?2 ?}
. [/ J$ l3 |: v6 V& g7 E, h. G+ G* F9 H; ^. p1 p+ m
4 r: @( R: j5 y' s" Z
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题  ?- f$ H. H  H; Q4 m0 l" B
/* Initialize MCASP1 */
* I1 ?+ d6 \/ F. r  ^, z0 C    mcasp = &MCASP_MODULE_1;2 G- @$ f* o- u; E0 {
    mcasp->regs->GBLCTL  = 0;       // Reset
5 j* J. L" X  ^; @# p3 L4 n% h$ H    mcasp->regs->RGBLCTL = 0;       // Reset RX
6 h& l4 Y. I" |# k( O4 T. q( u) O$ b    mcasp->regs->XGBLCTL = 0;       // Reset TX
9 G; o% _$ F$ E% e, E  C! c    mcasp->regs->PWRDEMU = 1;       // Free-running
( I- Z) u0 l& O1 P7 O  t% B   // configure McASP0 receive registers, |, Z7 a) v' M0 E: q
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used& f2 s* f* u: ?) N
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 {1 A, _; M9 F3 p3 l0 B5 A- l  \
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word. R, P/ l8 b  I6 ?) T  \
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)" \% r# x5 K0 Z8 _7 A+ q
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)( Z' Y4 v2 }9 c0 R! o+ E7 M
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
& q5 {0 O/ L5 j4 K- R% W: _    mcasp->regs->RINTCTL    = 0x00000000; // Not used6 R! |' G( a; f( F  M
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
5 Q2 R* i) s+ i. j
! `" e/ r0 R( g4 c; V* S# d    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used2 t4 J" C% w2 I# E1 @
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, _# u' R$ \- N
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word  z- X% f, T3 H' U  E2 u: I
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-163 U6 e$ f8 i8 _- D8 @* ~* O$ d" n* T
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK; ?& S$ u! i6 i8 S( i
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1% P6 P, i. m9 L3 H. H; U# H
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
( i! N+ ?' V6 w    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' o: `; J- v7 Q# |* U- q( T' i* o% M- |. a! {6 _) m' g
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
" R+ K& X4 }5 B8 O$ J, i& b2 u    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
, Z3 x: M( \  c! S/ P4 N    mcasp->regs->PFUNC      = 0;          // All MCASPs8 Y9 c1 e$ n. O( m- B+ v1 `- T# T0 J
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
: |6 r) l/ Y% j$ t
! M% t/ Q+ r1 V. m0 S    mcasp->regs->DITCTL     = 0x00000000; // Not used. U0 h7 I, Z6 f3 {2 n4 j3 Q5 O
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
+ }7 Y- Y3 C  @" U! O3 ^7 N    mcasp->regs->AMUTE      = 0x00000000; // Not used
$ }( ~8 I, }( ^
" I8 |  r: i7 c/ h/* Starting sections of the McASP*/
+ `, h- Z, i) w  D* a5 u    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
  j$ x' C' P& n& |    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
# k& K, l& T: g1 {, s" r4 F3 S- ]" e8 _    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;   N  _$ {$ s2 k
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
1 Y( M- T9 J6 \7 h
! x6 F4 T$ |- _/ `- I6 b1 e; O    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; : }. C, Y, V! K
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
% U* e9 ]( \& }2 A- @    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 7 }7 t% n1 u  H# ?$ @3 L5 A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
" C8 p) Z( `" G3 J( F4 v
+ W7 U7 E, B* B) A, [    mcasp->regs->XSTAT = 0x0000ffff;
1 s( O" R: P  j7 v  U& L% I1 @    mcasp->regs->RSTAT = 0x0000ffff; ' Z; e0 G8 s0 D4 F$ `& q- k' d
$ \; ^% v* D+ f3 I& c" ?
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
5 f7 n! C+ D. L6 v( m( E    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );6 a" G, j2 h" p% w! E( m. [# @: @
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 3 Q  @6 z7 d6 Q) C) b
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
& Z  j' L- @1 u
0 W9 h: G7 ]8 _- H    /* Write a 0, so that no underrun occurs after releasing the state machine */
/ ^% {, I3 }- g; V- F    mcasp->regs->XBUF5 = 0;
% Q2 B% D5 L9 R" r4 ~" v: h* t    mcasp->regs->RBUF0 = 0;
- v. i  U( B: \0 M  ?9 w
- A  b2 p# e3 j9 B6 K& u    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 7 u; H( _2 d( ]# h! V; v+ Y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );  i3 q, s2 n3 ^5 w: _5 W
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; . a! e1 {# Z4 V
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );; k" r$ n2 o1 i8 I, E: c  L& G' w
8 w* x& P- k! v( q
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ( }" r& N- N; r) ^- r; I- {! g
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
* t, C9 m, }5 ?& V: `    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; - l, N6 T8 e+ Q, Q& j8 d) X
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
* J* ?2 u8 ]9 N8 S4 [3 j- c! B" i
0 [; t1 z- G: A1 j/ o    CSR = 0x0000;
+ \% ~2 b% ]; G, C# }( h( D: t    INTC_INTMUX1 = 0x3d;
8 o/ R; _5 d0 m# P    ISTP = (unsigned int)vectors;$ u, P; w" Y6 W! k7 Q
    ICR = 0xFFF0;  
( J" H( G- |' y: m- n! E    IER |= 0x12;  . L3 X1 w$ [& i: _- W+ v6 w
    CSR |= 0x01;  
: |* y8 }* e* Z9 J& }. f# K; }3 H2 m( R- x8 ^
, n, J) \8 B4 p' P- I

# R' l, D& Z: a/ s* E, J: ^! J还有就是两个输入输出函数:' D6 _7 q" w# O) n* r
void output_sample(Int32 out_data)' R. I3 y# {' x# b6 D$ z$ v5 l
{
( j, p! S2 C1 q3 k  AIC31_data.uint = out_data;  
  C$ k4 p2 d, a$ [  MCASP1_XBUF5_32BIT = AIC31_data.uint;
! R( M" P3 F( q8 Z5 d+ d}
& [$ K' _9 w; r5 U: d4 J
1 V4 z6 K7 n$ t( |# G- FInt32 input_sample(void): L! C8 n7 y8 E2 t
{  
+ s0 q1 U" L3 o* \  AIC31_data.uint = MCASP1_RBUF0_32BIT;4 N- \( Q  j& x& v. M3 r
  return (AIC31_data.uint);- `7 L1 M3 j; }! Q2 _. Q" q
}2 _& `5 L- A- t, g0 @+ m- I

: n8 R' o. o* I4 I1 o: f% 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-2-20 13:04 , Processed in 0.042618 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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