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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:: E6 R) B# [* {1 }1 {
main文件:
  |/ \. D0 v) m# t7 [interrupt void interrupt4(void)  
! t' o; `" Z1 }: K5 J" W& V{
! T4 [) Z% l5 l- H7 _  Uint32 sample;
! ?  u! W. ~+ S- a/ ^" r. d2 d+ w+ F+ _+ Q0 i
  sample = input_sample(); // read L + R samples from ADC
' Y* u7 I7 z8 i. F+ q5 Z: F( d! l  output_sample(sample);   // write L + R samples to DAC 4 y( C2 e" i, ?3 Q1 S
  return;
7 X: f! {4 H) @& ^/ B" Y& ~0 j# r}
1 `0 X. H6 b  U1 O3 d- w3 P2 N4 H1 K: A! b" s
int main( void )9 o5 u5 V7 L0 m+ N; J1 I
{' G# }4 Q- B. Q) O
2 q9 y$ O# q6 s
    /* Initialize BSL */
4 _* `: x0 D" V% i    EVMC6747_init( );8 }- Z6 o! N- g2 B3 k7 t/ I2 L' w
        /* Call evmc6747_intr function */$ Y) @5 p2 u$ \( ^6 b& j' \9 O, H
    aic3106_init( );
5 j8 x/ L. ^. L        while(1);
# Y8 ~* r/ |; E" r( N}
: M1 V- c! J; H1 p- g
9 ?6 [7 g3 ^. E* ^) E
8 d. u0 f8 h1 u$ ?aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题6 i' O/ ?: Z% r0 M$ V
/* Initialize MCASP1 */" r, P* \3 j! X" V8 N3 c1 B
    mcasp = &MCASP_MODULE_1;3 U9 f$ N5 H; M+ I
    mcasp->regs->GBLCTL  = 0;       // Reset
; T2 Y' w3 n" V    mcasp->regs->RGBLCTL = 0;       // Reset RX. ]& r# y: c& x6 H. a0 ]3 c
    mcasp->regs->XGBLCTL = 0;       // Reset TX$ ^  Z) `8 r+ S& v  S' P
    mcasp->regs->PWRDEMU = 1;       // Free-running
# W+ I( P( G1 g   // configure McASP0 receive registers
# w! R, b( r/ Y9 Y3 t: w    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
' X( \0 P- d6 J1 _9 t' N3 E    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 }1 n  f& {+ ~& W5 P- L/ B
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
( R2 b! c9 [6 r) n8 w  ~    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side); ?6 D  @! I+ E* P8 i& }
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
: I1 e  q4 m3 D3 }* ]' Z7 W    mcasp->regs->RTDM       = 0x00000003; // Slots 0,12 P# Q6 T6 W+ a
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
* T$ U, Q, x) H& }0 x    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2563 T+ W+ E. M/ j, H

) D0 }! c( W( K: q* U! A& B5 a    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used1 r1 l4 @- z. B8 a
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ _3 W1 b" ?" j# o7 W8 e; h" C
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word. _/ U6 L1 F$ a2 ]
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16& ~: s! u  k7 t8 n, z
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
' T% D# x7 k0 ^! ^' v% z) e    mcasp->regs->XTDM       = 0x00000003; // Slots 0,14 ~4 l8 }- b/ T4 i/ }- N5 B. d
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
7 y$ L" _; I/ Y) T; G: l    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* l. w: O! s) U. @) G7 S
8 _: ~0 D$ i0 t/ J    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN0 X+ E; V9 J+ ~! |" X5 [+ x
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT" `1 O! W1 _8 B4 |7 T
    mcasp->regs->PFUNC      = 0;          // All MCASPs
+ ^" e' @$ ?' i    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
0 o) c* ?5 z8 ?6 u2 X
$ }: ^9 C" C0 [0 H2 {9 v# `    mcasp->regs->DITCTL     = 0x00000000; // Not used
/ c6 I( R# ?6 w1 z: Y4 c) |    mcasp->regs->DLBCTL     = 0x00000000; // Not used
; ]4 ^/ K! v  A: W    mcasp->regs->AMUTE      = 0x00000000; // Not used
' A0 G/ t8 l7 F
$ W' s* W" U4 A9 Y6 d/ I/* Starting sections of the McASP*/. y! F. K) I/ A' A2 I+ j) Z
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
3 r* ?( T, h; r' s    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  / l6 n3 Z- q6 `; i' A0 g0 C
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; " N# A/ p4 c  ?9 \
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
% Q" g: H4 T! E0 L4 d! q$ P
( F" ~/ T+ y9 x    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 5 M# g* M0 w- ?$ r
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
) C: j1 y) f3 Q  F( Z    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 1 _+ U" z: F! ^1 W, q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );" V! O7 k  ]; W  X1 h3 b
9 U& W" M( S7 \; R4 Y6 r3 K
    mcasp->regs->XSTAT = 0x0000ffff;
2 _, a+ w; X  G: n" v8 a; r    mcasp->regs->RSTAT = 0x0000ffff;
) ^' o- b  @& j6 v( r
: [+ W9 m" }4 C7 r) Q    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- V/ u, u& q# W  m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );0 k# _0 M! Q& ^+ m! w
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 w6 J8 v, p3 R( X( s* i7 ^" H0 {
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
# H* O3 X8 ]& \& \6 U2 Q1 c. [% Q0 L  u: y7 ~# B
    /* Write a 0, so that no underrun occurs after releasing the state machine */
- u: W) o' g' k    mcasp->regs->XBUF5 = 0;
6 A! x( ~* l2 w4 J7 b    mcasp->regs->RBUF0 = 0;
5 m$ i2 i+ Z( R& W' y, I4 T6 C* ^
) P0 h" S* ]* z8 \& E/ Z% X    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ; _8 j. E, j/ s7 \; j0 {/ W
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
, y2 ]# t9 o! ^0 T* v    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; . G3 V8 x7 G4 [7 R& Q  X' D
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );$ j1 a& Y' d& i( n

# j  z! g1 j# ]1 K    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; * |. U3 X& i0 Z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
5 m1 V) X# }9 _. a) W    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 8 n6 f) @. C$ X9 B! Q: w
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );# ]3 Y9 G: b5 L$ ], v* ]

9 V, B- i9 P5 w9 }/ t4 E: R    CSR = 0x0000;. N% I$ r, ]- ]( t
    INTC_INTMUX1 = 0x3d;
9 N- ]0 A1 d1 u) g! X( W    ISTP = (unsigned int)vectors;
- q, G7 g) t! P    ICR = 0xFFF0;  
4 n: V7 f! w2 I2 t4 x; n    IER |= 0x12;  
2 Q: t: \+ }' Z* p1 E    CSR |= 0x01;  ! _5 D+ @5 [! Q. U- A$ q/ e- \

  B  X- h1 U5 v4 a  [: C( ^- g$ X! v* B2 e/ l# }- X3 O+ H. r

6 h' H4 U& w1 G$ P4 I8 ]+ P: H还有就是两个输入输出函数:/ O9 l  _! l8 c4 R" l% A
void output_sample(Int32 out_data)
  b8 L. A8 `* z8 W* _{
* ^" J' Z7 `* ?! ]  AIC31_data.uint = out_data;  
. x! l% {: ^/ H: X4 {. A" K9 N  MCASP1_XBUF5_32BIT = AIC31_data.uint;
7 t( J6 |/ t" C" `, W6 y% ]' V+ M! S. Z}( `2 K' s) [2 R% z  }9 U
' I" K7 y5 T, c
Int32 input_sample(void)
9 n$ q) ~3 c- }$ t{  
& q7 ]2 H. D& I* e  f* d+ m  AIC31_data.uint = MCASP1_RBUF0_32BIT;1 R6 h, |" B  B1 x
  return (AIC31_data.uint);6 W1 S: |/ v! b6 J  T6 ?5 d
}
" ]" W8 s, l0 E
$ s/ n' p; j) s7 ?" i
分享到:  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-31 18:24 , Processed in 0.057860 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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