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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
' ]' p4 U8 `; [% d1 Hmain文件:5 ?. Z/ M/ X7 i2 j7 [
interrupt void interrupt4(void)  - F/ M$ n: M# {' W3 g/ B6 l
{
' y- K  X2 V7 g4 r  Uint32 sample;2 q: H  \5 W- x

6 c+ P6 x9 v" T) x5 t  sample = input_sample(); // read L + R samples from ADC3 h+ G" B, G, N# R
  output_sample(sample);   // write L + R samples to DAC
4 s# N: [( L6 q) I& G5 Y" F' W/ T' f# k  S  return;
$ f6 G9 ?7 Z- ]( k}
6 V8 V' H+ o' T. W! f3 t* _
2 L8 X3 f+ l7 b! z, ^int main( void )
0 ^5 ~9 _9 _. {4 y{
- o3 v& _* e8 f& s' y' {) n
1 k6 n8 U% U" j8 |: C$ z    /* Initialize BSL */
0 o; I! c- a( T9 x; S    EVMC6747_init( );
4 ^, E1 `1 y6 D        /* Call evmc6747_intr function */
* d; R6 U( u; _$ `; j$ t    aic3106_init( );$ j; h+ L# E/ j
        while(1);( G- `+ n/ t. R0 n! v* e& k- o
}: T. p# R5 b6 t6 c3 l; C- e; K0 Z
. y5 _! O# @: N$ P; D- \

; U" J  j' l* U2 N& Xaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
; f" K7 v7 Q3 l4 V/* Initialize MCASP1 */# j0 ?4 v- g# x& y/ t2 q
    mcasp = &MCASP_MODULE_1;! M# L- z2 Y1 h- Y& }
    mcasp->regs->GBLCTL  = 0;       // Reset
" M" v  z( P% L5 J( S    mcasp->regs->RGBLCTL = 0;       // Reset RX
* `+ Q, {& Y1 w- V+ D) V  V    mcasp->regs->XGBLCTL = 0;       // Reset TX
6 e2 P( u2 ?2 n; W    mcasp->regs->PWRDEMU = 1;       // Free-running
5 V2 p0 ^  q/ J- J/ v6 R& C4 y- b3 Q   // configure McASP0 receive registers
7 U$ {: n8 R3 J8 J/ A0 K    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
# v: s* x; a% l& M, a6 f) r    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ [/ t2 s- Z* x; d  D  m    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
3 z% ]  x- F0 a3 Y    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
# q- I3 x* k6 M1 b3 W! A    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)& b% I' Y2 F3 v6 I
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
  \( v. C$ M6 y# Z( K* {    mcasp->regs->RINTCTL    = 0x00000000; // Not used! `4 I: Y* D% _- i: I2 i; J
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% I9 _& l5 h1 d' \+ ], Z. g5 q- [

& j7 E+ M& s% G1 {9 ~    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
+ o  p  O0 M0 `3 |! j2 L7 q7 S    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ _2 C3 g! n! f3 T0 ~/ X* \9 c
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
& Y! Q6 z5 K- j- b8 Z    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
4 R1 _+ V3 s  j2 {' e, t, T    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
6 S) H$ v; [3 C& x    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
( ?1 n& z4 K9 p6 v& l    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
1 @/ [8 `# i9 n    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; }! c2 {% o  ~& s

; h+ h2 k% x0 ^8 o3 s    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN+ j/ S" w2 l) D. D7 q' z! k" e
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT1 Y! v- g! A# A2 y. v) p7 P3 i
    mcasp->regs->PFUNC      = 0;          // All MCASPs
9 b/ @! V4 G% x( p, }' b# @: ]    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX11 l  n, J4 _& ]% C+ r4 X
- X! s: f( b" M( A  ?: s* `' [* v2 J! n
    mcasp->regs->DITCTL     = 0x00000000; // Not used
  c% P4 M" I6 ^# f$ g6 x    mcasp->regs->DLBCTL     = 0x00000000; // Not used$ e  [4 i: I/ Q$ G& v# ]
    mcasp->regs->AMUTE      = 0x00000000; // Not used
  Q, k- z- I# R% b* B/ u+ |* _; b( E
/* Starting sections of the McASP*/
/ Q5 q: j9 A( k# k% ]; F# i    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
$ s8 ^4 W8 n! n. }3 w3 L- r! g2 Z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
8 _: ^$ p  k# d6 z* ]    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; / H( C5 `" A) `( W& P
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );- Z: K4 x! {2 r/ o, Y

" t1 m; T' q2 s( ?" l! O7 ]' V    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
- x3 b2 S4 a6 [# m/ z) Q9 h; M    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );7 V3 R/ N0 I" j
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
# {- E- R9 c2 X    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
+ m* j6 F/ A# C0 i# A# X
. y/ q9 B% R8 ]$ d    mcasp->regs->XSTAT = 0x0000ffff;
. ]6 |9 g; X" b3 ?" \    mcasp->regs->RSTAT = 0x0000ffff;
1 @: V* {# @; i4 Q9 J( K
% c' s) \1 h8 s- N# K& [" m    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
1 c" A+ h! W& [: @( `    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );1 c  C* X; O8 o' G2 P
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
$ b1 J7 `4 f1 j8 w, l8 y5 }    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
0 t" R/ P) D1 e) C7 P; q. y* z, C* D$ h
    /* Write a 0, so that no underrun occurs after releasing the state machine */, `! k& A* Y7 P" z) u8 p
    mcasp->regs->XBUF5 = 0;7 T% J, p7 _( Z. e
    mcasp->regs->RBUF0 = 0;
7 R0 l% Y1 }* h( W# [4 m$ V
4 G* B" i; |2 G, ?9 G    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 5 i- w$ N* u, d# G, R2 _
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
. V4 R  k5 {" L) c$ A+ o" h    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ! |+ ]- C- O& S1 Z6 a3 y' I
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
5 e3 h5 j+ \0 A* x
. S) H7 i$ V4 F: N+ W& {( O; b/ H    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 3 O. Q3 k, C- J; M6 R' g
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );, E# S* O; M! F/ h' R
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
# ~8 w& c+ I- ?2 h# T    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
0 u" u" `( ?, G2 _5 q$ \
3 L( m! s8 J: m5 J1 h    CSR = 0x0000;" Y2 E7 _: q5 m% H
    INTC_INTMUX1 = 0x3d;
: D0 t) x4 i, f. l) p5 z    ISTP = (unsigned int)vectors;
0 [" ?5 W* g+ p# T    ICR = 0xFFF0;  & U6 N" }, D& K1 B3 r1 }
    IER |= 0x12;  + k/ u7 b  n7 w" D+ q% U; \
    CSR |= 0x01;  1 a- R" o/ B, L, o

  N9 K' E+ Z4 w# t( [6 x% z. b4 M5 j- u3 }
! m# G6 O6 C+ T9 Q) |4 K  ~
还有就是两个输入输出函数:7 }9 s7 w; R8 P4 Q
void output_sample(Int32 out_data)
* h2 {! v9 K7 w2 Q2 K{& e! I9 ^9 f$ E& u. q
  AIC31_data.uint = out_data;  ! J" y, ~& ?* _, F4 z
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
# I( l, J  \/ y$ C. D6 g}5 _# o+ s# ^: K' e3 N
7 |  g$ H# C1 Q% T) @; t; e  x
Int32 input_sample(void)
& q* m& |5 t7 A* U+ O$ U2 G: V{  
1 @9 q5 R/ w, F9 T+ x; _& _  AIC31_data.uint = MCASP1_RBUF0_32BIT;
2 N7 a" {2 x: a6 M; {' N% Y  return (AIC31_data.uint);
4 ~4 ]# t: @4 |9 k}
0 O$ z$ y. N* {
; m: M! G' _( a3 O0 _4 Z
分享到:  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-10 04:12 , Processed in 0.040168 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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