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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
3 Y. N- T% S& lmain文件:  {# `( w: }8 x! I
interrupt void interrupt4(void)  3 D; y$ s5 r7 u) [- l
{
3 L) J& S- q% @  Uint32 sample;
2 I6 e7 g9 z. D6 u5 p% P8 G7 ]2 ]: Q9 B0 f
  sample = input_sample(); // read L + R samples from ADC+ [! ~! `( M8 m+ U7 b
  output_sample(sample);   // write L + R samples to DAC ! ^" t( Q- l/ a: Y, J- H$ M  }
  return;
8 d: T- K3 P- B, h. g}9 u- G) E+ y* s) h

7 C* a0 z6 m- c  Gint main( void )# w! r3 n) Q: s5 l+ _
{
0 I, l/ y1 H& j0 z/ k& h7 `8 p9 E" p2 O2 D$ n3 p7 u$ h
    /* Initialize BSL */. H. ~$ C8 h* e1 T
    EVMC6747_init( );
# D, J# j+ c; l5 @2 g) `4 i+ P        /* Call evmc6747_intr function */
* i9 m* c' X9 r9 B, }6 i    aic3106_init( );+ c# [. x4 P3 B" I0 J' b
        while(1);
1 L. w7 x3 |" e+ x; C3 K}' d7 B9 r0 R) Z+ c  |5 r- I

* x/ j. q4 }2 y6 A, {' R! `# S; F) ?* ?5 T: ?% i
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题3 s; T! ]1 E) I/ I" a5 R5 [1 q# B
/* Initialize MCASP1 */
* S# J8 N( E( I, T7 T9 Z    mcasp = &MCASP_MODULE_1;# d1 `3 {# B' `, x2 T7 f
    mcasp->regs->GBLCTL  = 0;       // Reset, N( S" \9 c% o, H/ b. H. c
    mcasp->regs->RGBLCTL = 0;       // Reset RX
1 h* D* F8 N0 P8 Q0 ?* W, h    mcasp->regs->XGBLCTL = 0;       // Reset TX! Z* Z! Q$ O. a# A" r
    mcasp->regs->PWRDEMU = 1;       // Free-running" S8 v+ R5 V' c8 }! z2 R6 {
   // configure McASP0 receive registers
' B: G( s+ u, {3 a: l    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
( e& ]$ U- t$ x$ Z( D6 C    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus; S/ D) [) a8 x6 c5 J! J7 ~. M/ V3 t0 Y
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word; }1 C# Q/ P5 t
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)( W; y, {1 u; T% y8 C9 X( c
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
2 Y4 H7 t, r% g+ M' W    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
; M8 a2 q- Z7 L6 ~) `, v' j3 C    mcasp->regs->RINTCTL    = 0x00000000; // Not used
6 C3 c" I2 D" M* V6 u    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% N6 Q' f% ?  Q2 v4 ?
5 L$ y8 h1 ]! |, `$ O3 n& ^    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
* C$ R2 U( U9 ^+ S3 A2 u  b; {    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; V2 k; L* F. i! |  _    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word9 s. R9 D: d! U* d6 ?5 j! t
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
) L" B& l2 b" h    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
' w2 F, E; D  M/ G* {% H% v    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
" i. a8 s3 n8 l. G5 h4 d0 H; }9 A4 x    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
0 u! A8 |; [4 E' N: ?. G( H6 S    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256# @' {3 e* ~% f3 _7 s3 R! F6 p

/ O$ p" W+ }- J/ |- x9 M5 O1 ]    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
  H7 r1 H: }5 w) Q2 [    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT+ Y+ B/ P8 h" e! ~8 H" g2 R% m  k* F
    mcasp->regs->PFUNC      = 0;          // All MCASPs
1 s4 U/ M3 v! A& v8 }  z+ z6 o, Z    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
. j, p$ f( a+ ]5 o; K! w4 \& ~. j
    mcasp->regs->DITCTL     = 0x00000000; // Not used
! ?' l8 r7 s( s  S    mcasp->regs->DLBCTL     = 0x00000000; // Not used3 [- n2 p& J; Q$ I% {! n/ B1 p
    mcasp->regs->AMUTE      = 0x00000000; // Not used
8 P0 W% v! A6 F6 B6 E3 l& p: @9 C- N
/* Starting sections of the McASP*/3 f5 F+ T# j) B( E1 A4 w
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 8 U( R- P( p0 A8 f+ U. f* n5 w2 v
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
  q: J; f% T4 U7 U) ~8 H    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
& a0 L3 v* y. l" I8 x- J7 E    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );5 q' n8 i+ u+ [5 `& c( L
4 t( E5 |) U1 s  S& W
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
2 {9 g) E# ~8 ~- R) V    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );% F+ n$ p6 ?3 a$ `3 s
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
# H( C0 ^2 h- q4 D    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
7 `7 Q9 U4 i4 h2 G! O2 u! X* Z; y# M3 j  o
    mcasp->regs->XSTAT = 0x0000ffff;
; ?7 ~: i9 |( K    mcasp->regs->RSTAT = 0x0000ffff;
' b! W' M# K: L: U6 i
- g% j5 P, j3 K0 `    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
6 x7 n* U0 g& N' R5 l    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
9 j. i7 ~5 q2 z. h6 t    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
) x% x) [9 J1 F8 G/ ?. S5 Y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
0 Z2 P% {3 \* ~) d! }4 z0 v1 a$ v$ ?* m( l0 {2 V& ]
    /* Write a 0, so that no underrun occurs after releasing the state machine */6 M  `( Q2 ?/ i2 K4 O6 X4 M
    mcasp->regs->XBUF5 = 0;/ V* z7 O, {9 g0 N& p8 C
    mcasp->regs->RBUF0 = 0;% C1 v7 v0 E% e( [- {; A* w+ j
! `' O" Z1 T3 G% x7 T
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
9 {/ G. `$ c' N* |$ d% Y    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );+ a+ `& p# w* D* M8 w1 s& e2 w
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 5 ^5 W9 n! W( }! c1 w
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );+ \. `7 s" f/ L' n- y( w% w

( B$ ?# L3 g) O( M/ ~7 Q* a# e    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 9 x# E8 n! L! C* N8 E
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
2 J4 e# h4 F5 c+ L* ?    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
- p3 H- g" g) y( J7 w& q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );$ A' C, E) J* x: L1 w  M1 [  a

5 q" d9 K. I& ^    CSR = 0x0000;
/ ], _# t9 j2 j4 @; J    INTC_INTMUX1 = 0x3d;
5 Y& C" ^9 C9 N' _  m" p7 i& Q4 t    ISTP = (unsigned int)vectors;2 G2 z' l  i3 b. ?: |
    ICR = 0xFFF0;    u* }2 e4 V, f- w
    IER |= 0x12;  
8 F2 Z: ~# {9 u0 m7 C- H$ m    CSR |= 0x01;  # P8 k* t# r. y9 }! ^5 W6 J7 S9 o

' b+ p& T; l9 X4 E7 ]) D% B
# R, d- F% {5 M# n- e$ R- o1 b) Z: E) i' K
还有就是两个输入输出函数:
: Q# }' \! r! K3 O5 U5 F: T% cvoid output_sample(Int32 out_data)8 u0 J. B6 V# G1 c# `, k& Y( g  b
{
2 p" d( W; x9 @1 X8 a  AIC31_data.uint = out_data;  
8 i! Z5 A5 j" ]' W  MCASP1_XBUF5_32BIT = AIC31_data.uint;) [' |$ }1 @) B4 v
}6 p" n' g8 e5 b) D4 o; x/ j
/ q: R; _* O$ K9 `' L
Int32 input_sample(void)4 m5 u$ ~# m! `1 V  Q$ k
{  # m" |5 ^; g7 X8 |/ l" h
  AIC31_data.uint = MCASP1_RBUF0_32BIT;; f0 j, k" |- k3 V1 f
  return (AIC31_data.uint);; O6 u, b3 k: G0 ^" q
}7 ^) s) R( f. f3 f. L1 X

1 O- T. b2 N8 z* t8 k; k3 ~1 O$ k
分享到:  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-27 02:22 , Processed in 0.043196 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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