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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:, [) f( }7 s% r# g8 V& h
main文件:
/ A) j& n9 H; xinterrupt void interrupt4(void)  6 K% Z7 P% C( S* q* _
{
1 @( V9 a7 _" J: C. ?! p! ?. e  Uint32 sample;" `; ^1 H6 i6 X  v
: g$ x. _5 {8 l( k0 j) X
  sample = input_sample(); // read L + R samples from ADC
6 h) p, U7 H6 W" h9 c3 {+ M  output_sample(sample);   // write L + R samples to DAC / g8 |$ A# s+ t4 [. O
  return;8 T( ^  K. c: q6 l
}
0 `! w5 U: ?% A: {8 e! b* F2 u+ v9 k" G. V' @" {
int main( void )
5 {: l. W6 a( C{& M6 a& s6 u- }

7 W4 G4 O( c7 Z/ |: G+ }/ K, B- K4 J    /* Initialize BSL */, _. _( L' J( y
    EVMC6747_init( );
6 o9 G4 p7 [) d7 p        /* Call evmc6747_intr function */
  \& ~' U$ o9 c3 a6 }2 w. U# U    aic3106_init( );
! `- S) o9 A1 C+ u( l+ V        while(1);" X; I3 E* {7 H/ R
}" g$ R. F; u: ~, f

& {; b5 e+ v" Y& s
; b( q8 R3 y4 n; {aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题3 |2 o1 s: l/ |% {1 X8 L" N
/* Initialize MCASP1 */
$ j0 i1 ^; Z) |8 D    mcasp = &MCASP_MODULE_1;
6 _/ \6 |* F+ Y0 m& P" H    mcasp->regs->GBLCTL  = 0;       // Reset, K3 B/ A  t3 Y' [1 b& h, O! c
    mcasp->regs->RGBLCTL = 0;       // Reset RX
: D( d% m( q9 n# ^6 m/ c    mcasp->regs->XGBLCTL = 0;       // Reset TX
; v8 r6 E6 p6 V. ?    mcasp->regs->PWRDEMU = 1;       // Free-running
+ \% x$ A/ K/ S: {$ i6 ~0 T8 w   // configure McASP0 receive registers
; d9 Q3 y- B& o3 X: s* K5 j    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
/ f3 F) @2 k1 g, k    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 B% M: g2 O: F2 w# A
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
9 P, U/ _& {1 B. Y    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side); ]5 B8 P5 x( U. q" L: @6 n
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)) p* A/ b  h0 m. k
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1! U1 e/ ?4 X. R# b
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
1 ~8 K2 S$ s; z6 B3 V# ]    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
/ j$ `- z! v% a4 F6 x1 m; {
* j- Q3 l% E5 T1 W    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
8 ?( V5 D7 v; K# n% c0 W" }' Q    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus- l% \% ^7 h0 @. }% w% g! y
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word' j4 R8 ?5 S. t: X* D  h: t
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
: o4 k$ b% `: O9 m) O4 U    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
$ s3 q0 S  e/ U3 q, a    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1. e& T6 U" Q+ q; N( A+ P5 N" x
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit% s; \2 k& M! {# X, _0 r( ^+ a
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256  V0 ~" T& ?. L; h& B2 L% i, t% i- Z; o
4 q2 l- J8 ]7 T# t3 E1 I
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
, f; m6 ^% Z* E1 H- I6 v    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT' H; H- r6 _% t7 W3 \2 l
    mcasp->regs->PFUNC      = 0;          // All MCASPs8 _5 s& t2 l5 Y% h( T
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1+ v: D* y* R- ]$ l- n8 k+ s

! z5 W2 P/ Q: l: e+ D1 Q: l. C- d    mcasp->regs->DITCTL     = 0x00000000; // Not used
7 e! k! W! @9 T. N+ @" B# O    mcasp->regs->DLBCTL     = 0x00000000; // Not used
" @! N5 j! {. a, O, o2 }% n    mcasp->regs->AMUTE      = 0x00000000; // Not used
5 m/ L  [9 c' W7 q2 M, }( x) g; K1 q
/* Starting sections of the McASP*/
( h' V+ q) x2 n    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
7 g9 t, u+ S6 V5 Q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
& V; n; u" R2 J9 _8 S+ \    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
1 C' {! A/ P) ~0 O# G+ j    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
6 c4 o0 z1 G+ W% y, Z6 G% m3 _1 `
3 @  C- f2 a( P6 i& N$ m    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
% E" B6 w2 ]  a5 x! v$ A$ k9 c    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );% @' w1 M/ j# p8 }+ e
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 2 ?0 p% V- E3 Z0 F# }; @5 m% {" y' T
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );( b. C. {& m$ r% V4 x4 X# P0 k
7 I; ~* {& k9 d4 C
    mcasp->regs->XSTAT = 0x0000ffff;
, j( j4 G* z4 a( V& }, g; c    mcasp->regs->RSTAT = 0x0000ffff; . K! S# q& p; M/ E
9 i% g  I  D& v; _( H
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
# n0 t9 ~+ m- [# l+ F( m7 I    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
( M: B# G6 n, Q: X' g( a    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
( [2 |( N4 g2 \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );7 c& }' U! v  A6 Z

) D% W% g/ o+ I/ N4 I/ m    /* Write a 0, so that no underrun occurs after releasing the state machine */
  K6 o$ n$ I6 @$ V! O    mcasp->regs->XBUF5 = 0;
2 A/ K& ~2 B7 G( n3 t7 ~1 P    mcasp->regs->RBUF0 = 0;
! [7 g- y& `1 R& Y6 g3 x
' x! G4 `3 Z# Z; I! J, `+ D4 Q    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
1 E, O% f; S0 @9 }+ v) ?4 }) @    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
5 u+ R, U* g4 P8 U8 u* P" |3 J    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
# @0 D& Z! J7 m6 S6 r6 W    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
: r" }8 v& q$ o+ x% z7 |0 o2 K. ^2 |2 g. c0 ^
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
- |1 Z; P1 i# [4 ?) Y" e. Q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );5 N  \% j8 k8 A0 w3 N$ W
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
' E  S3 a- W+ A8 @6 m- k8 R    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
- r% j+ ^2 |: O" [& M- N
" g4 v# N7 ~6 s( L7 s! r$ f    CSR = 0x0000;) h% |' {2 O5 J; d+ w! s) z
    INTC_INTMUX1 = 0x3d;2 e7 X/ L) ]2 C2 N% H
    ISTP = (unsigned int)vectors;( W8 z4 Q& d2 {5 |/ k
    ICR = 0xFFF0;  ' a4 S; q0 ^( G
    IER |= 0x12;  # F* a  F& |' l2 A
    CSR |= 0x01;  
) h- a8 m! B9 S7 Y: J$ `. x  w( z$ A5 Y9 T) C  x7 h8 M, n

5 b0 [* t) O5 ]! R+ @# l) M* Q6 V5 `
还有就是两个输入输出函数:
" L  q: D* h" W9 q  Yvoid output_sample(Int32 out_data)# c& f/ ?' k7 c5 Q; \8 u* X; O
{# d" ~9 q8 D* a9 D) @8 @2 g
  AIC31_data.uint = out_data;  % i5 I7 V" ^; v) u$ {) K2 `5 ?5 p
  MCASP1_XBUF5_32BIT = AIC31_data.uint;# z8 S. p7 N- j( r8 r
}1 Q2 y) }- u; C; N' h9 U% E1 {
( R+ n$ Y$ ]" W2 Z* v0 c* k
Int32 input_sample(void)" M6 |2 U; O2 ?2 s. g: \
{  
; i  p" p; @: q  C. s  AIC31_data.uint = MCASP1_RBUF0_32BIT;+ i& R* q  x2 {6 P$ U* U$ Y7 d4 u0 P
  return (AIC31_data.uint);) a1 U# Q' S! N# f% a( E
}
+ V' ?7 X# J( s+ h- @! L. g
9 O9 p5 K& s' U: A7 i5 u. L
分享到:  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, 2025-12-4 10:48 , Processed in 0.037568 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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