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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:! l- H/ P$ i* [' [) c; Y  r" Q
main文件:& S$ k+ N7 k3 L. P3 a
interrupt void interrupt4(void)  
. n. ~, \8 z0 \% b) d{
$ O4 G$ }# ]+ R: |8 d' p  Uint32 sample;6 N& j1 [1 \7 ^2 \' e; K- K
8 \' P6 \1 W! S
  sample = input_sample(); // read L + R samples from ADC
3 Q+ G$ ~: A. v; q( M  output_sample(sample);   // write L + R samples to DAC 9 [2 q9 L4 `6 g  H8 i  P
  return;, @2 H2 j" I, s3 W9 a+ u) \
}5 f5 w8 ]9 B# \0 T
( P* v+ |  H+ E4 ]4 l
int main( void )! B8 c% Q2 y  ^5 N! {
{
+ n, k+ |! ^+ L+ q/ S+ e; h, R& J( x* O& K
    /* Initialize BSL */
& t4 X* ~5 N6 L" N    EVMC6747_init( );) v- ~/ M$ l7 f0 z# [2 b9 ]0 E3 g
        /* Call evmc6747_intr function */3 A; z7 g+ D) i2 m' H' a
    aic3106_init( );
' K( @1 X1 d9 k' Z        while(1);; f$ _  T2 `+ `3 ]  Q' G
}
& L% F( W% s. P/ |+ w+ s+ O- v
2 B! R) k- H6 M1 l7 _) j9 v3 n0 {. S
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
- I' ?( ~" `4 Y* q; i/* Initialize MCASP1 */; Z; r9 v/ y7 Q* u
    mcasp = &MCASP_MODULE_1;5 R7 R0 O# z/ q- A
    mcasp->regs->GBLCTL  = 0;       // Reset  _6 e) W8 g! D3 M! f8 F2 X
    mcasp->regs->RGBLCTL = 0;       // Reset RX% S7 |! k6 Z9 P% @4 Y
    mcasp->regs->XGBLCTL = 0;       // Reset TX6 R) W4 G/ E( S; x* O) v: G
    mcasp->regs->PWRDEMU = 1;       // Free-running
  x8 P! N6 Q& H! l. e) s7 r   // configure McASP0 receive registers8 `' r4 q  E. P, c) @9 x
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
: Q* u" g: Q* u  `    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ b- ?+ |6 Q* @; v1 p2 V    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
- }' s4 h& q7 \3 @5 Z# V( `    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
8 p' T' |( b% Q2 L: l$ C' @/ V    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
1 d9 I& e/ z2 j+ ^    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
# s& X+ }; Z9 n9 y5 ~' s    mcasp->regs->RINTCTL    = 0x00000000; // Not used
- M! }8 j- {$ I    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 V1 y6 v, U+ j+ n3 H' R; m0 d0 O! i  z( A* q$ O5 R
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used3 ]1 v! b! G0 h% @) Z
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' v+ d2 I( C+ v3 B/ \9 x    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
3 p/ f, W$ O% F+ O/ x    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
, y  U' h, o! j    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
6 x5 A8 [/ q  Y( R! y- V; l    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1: }( Z/ |9 J/ ^& {% o9 O7 M' F0 Y4 k
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit% |5 S& U1 i- F% G9 b
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 S" Z7 o% t: t% @' c. R
1 B$ G* I% S! T5 N+ x& S# Y* q
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
9 H6 ?( p1 w) ?# k# A    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
3 ?( K! ?. X1 ~( K& p4 L    mcasp->regs->PFUNC      = 0;          // All MCASPs
* U6 r+ o' k3 H+ ?7 K; n' m    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1  x' h+ a/ K( U, q

8 Q2 d9 `# ^& G. Q& o7 }    mcasp->regs->DITCTL     = 0x00000000; // Not used# M& L4 }# n0 ~& l  U3 V5 `
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
0 a1 D# l7 m3 b' x    mcasp->regs->AMUTE      = 0x00000000; // Not used8 z7 U8 ~* j# `3 t) G
# C# o* T6 ~% K" M# w/ U" ?
/* Starting sections of the McASP*/% N6 M$ w% o) K% ^* P& {9 }
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ' j/ j' I' A4 _) H' [' R  d6 T: {: g1 B
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );    ~) J: N' M0 p- X/ F
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
$ t/ _0 H' Y- \0 J# T    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
( H6 Z! G4 z. }; a" y( P9 S: A- O2 V2 p# U1 A" A, i
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
4 n8 a+ U% b% r! G% l; h    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
+ s+ e' h  e  U% Y& X    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
# f6 o' r* A: s3 x2 [    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );6 `) x6 B1 p) X

) L2 h. K* s0 j9 h0 c% f) M    mcasp->regs->XSTAT = 0x0000ffff; / n- a8 a; e4 O/ ^; g
    mcasp->regs->RSTAT = 0x0000ffff; 1 P  a: U0 q3 ?
, [. y8 p* Y" A" F, a  u
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;; v% j' O8 X& s1 l
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
: r9 C# }. m: z7 W5 @) D4 M    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
" I8 [, k( d& j: C! t2 ]    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );9 s5 F) r4 Y3 E1 F" T

0 w5 M2 }1 X5 J( T3 o' O    /* Write a 0, so that no underrun occurs after releasing the state machine */
+ E9 Y) Q% X, o) p) O; H    mcasp->regs->XBUF5 = 0;2 C1 I7 `+ O' k5 _9 x
    mcasp->regs->RBUF0 = 0;4 q( p% E5 O& w9 X1 q: ]4 N5 N
6 B0 {5 |: y& ^
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
6 U6 f; _6 J6 v2 Y% Y: ^& I    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
8 t+ L8 N' B5 m5 X; u  C1 {    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 7 v! H. j" K6 ?: @0 z! X
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );  c+ e7 n7 }& [6 P8 A4 x
% L# o. w4 {) b2 Z6 K6 h
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 0 l1 k: S. P' K( Y6 X6 X9 h" k
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );; u: q3 f7 W7 @0 C. G
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
( O  f: e0 K+ U    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );8 k, ~3 F  A. E) K! F) V* n; Y* w

( H3 ~% u, f, S$ ]! |# D7 [9 W    CSR = 0x0000;
& E* Q+ _6 \' J$ K( {    INTC_INTMUX1 = 0x3d;6 h) R" V2 m, H" g5 a0 [- g
    ISTP = (unsigned int)vectors;3 m, E# {4 B; K; a" C% L1 i
    ICR = 0xFFF0;  7 h7 G" I& q( s- r) x1 m
    IER |= 0x12;  
# S7 D+ X" w3 |9 z. ^    CSR |= 0x01;  
( G+ G, ~! u# m, G+ F* c( N, k/ V9 h1 v1 v6 w' v0 W& O4 O% A3 X

- \5 S  Q+ b* B. m( p' `  g1 m' k
还有就是两个输入输出函数:8 g( h% l3 N5 |! p* n3 R
void output_sample(Int32 out_data)+ O; K  p/ _0 J3 }
{
+ o% v4 f* [" _+ v( A% e$ m& J  AIC31_data.uint = out_data;  
' ^4 }8 t) \, X9 K9 L# D  MCASP1_XBUF5_32BIT = AIC31_data.uint;
. |0 s5 v- V; K, P( z3 z3 O$ g}
* h: _5 ^+ A2 D+ M5 \) C6 R1 ~2 Y1 N
5 Y1 R6 F$ y( bInt32 input_sample(void)
8 j( G( \3 p7 \- v- O3 y{  
( M0 ]8 ^% ]" p% q) L  AIC31_data.uint = MCASP1_RBUF0_32BIT;; E4 N7 ^) q9 ^  E. X& W
  return (AIC31_data.uint);- p. N# L! e) Y0 m# g8 b$ l$ ~
}1 F2 h. M- W, N

  m1 H; [1 Y1 [0 s- 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-1-5 00:51 , Processed in 0.041587 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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