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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:4 Z+ B" R# E2 L4 ^7 f; f
main文件:
, v% G/ C9 H5 y( cinterrupt void interrupt4(void)  ' q2 B& _4 O$ q( u1 m# I  r0 b
{0 H' e6 D( b0 |: P0 {
  Uint32 sample;7 j: w. Z# @& c, i0 J7 n4 ^; E

2 x( w# F8 \& T, Q  sample = input_sample(); // read L + R samples from ADC
/ [" p' U8 c9 m, z( o  output_sample(sample);   // write L + R samples to DAC 3 l8 r' G( I: H
  return;  ]( Z: B! j& ]2 O3 w" ]/ _
}
: ^) G5 @& Y" c
9 c2 A( f1 O8 P; Q- lint main( void ). }! r8 J$ T, l) {
{
8 g' C; `" W4 ^; W0 a0 \: z; D' U5 x0 _
    /* Initialize BSL */
- P! S, }& |, d' e8 D" o    EVMC6747_init( );
* `) |8 ?& G' _. T        /* Call evmc6747_intr function */! y. ]2 B+ |. r- u  ^
    aic3106_init( );
! ~+ ~1 {+ q6 Z% H# L        while(1);/ f2 f; F# v' V$ {% v
}
3 P9 ^) p8 F6 z( p2 o7 `# I, v
; Z. H$ s9 B6 l* D8 l1 ?$ F0 O, ~
8 x" V( S2 c$ }aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
) E& j" X+ U! N  ], S9 g0 u* V/* Initialize MCASP1 */" F) H+ g' P# }/ [% i; p& u6 g
    mcasp = &MCASP_MODULE_1;+ n5 g, o* `, b7 H9 s
    mcasp->regs->GBLCTL  = 0;       // Reset
' f; J" \- O  I6 [* l! L; ^    mcasp->regs->RGBLCTL = 0;       // Reset RX
6 f, E$ s3 `5 Z5 A6 U  b. K2 E    mcasp->regs->XGBLCTL = 0;       // Reset TX7 z' u( A) @& H) p9 U- k6 v
    mcasp->regs->PWRDEMU = 1;       // Free-running7 d$ Q, S2 f4 K5 R" E# j7 I8 d* Y
   // configure McASP0 receive registers) G9 q2 Q! K& V
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
2 t* ?' ~, o1 V; @    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
  H6 c. g& |( R) U' ?+ d, n    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word4 ?% M; C% K1 A2 L. n3 t
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
/ y) {4 @) e0 i4 T; b% x    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
, K* {& Z- J; e) X- y    mcasp->regs->RTDM       = 0x00000003; // Slots 0,15 w( ^9 m, o) k" W  x1 c
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
2 J* I- T( B4 j    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256/ l6 Q, @/ c0 c4 S
4 U, O. p. Y7 D# s3 p5 y, h1 V5 V1 `3 X
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used3 D7 w) H! @) ?0 ?
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 e, i1 r* e. I8 ~) j, N    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word: W3 w9 i/ E" ]
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
5 l* Z5 W5 v8 m* ^4 F    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
1 F$ ]3 _- k, s9 W& |5 @    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1, q7 c! }6 N) X5 l
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit# f- ?$ K! L' A
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( X+ k/ j, W; E+ W1 H( d/ F/ u
8 \. d% `: {- G: {    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
3 t9 C, X0 g% x8 D7 D3 b  H# u    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT1 n7 ?4 {' b1 p
    mcasp->regs->PFUNC      = 0;          // All MCASPs
" a* g8 Y* {- r    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
& i4 p3 k) ?5 U6 V9 `9 b. b$ T$ T, [% J4 C2 u4 G+ f- n
    mcasp->regs->DITCTL     = 0x00000000; // Not used3 F6 b) j$ z- B$ c
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
4 K# W  I' d% K8 ?  H; G. t9 n    mcasp->regs->AMUTE      = 0x00000000; // Not used
6 a. ]! _# P$ Q' H. o5 N! P+ i0 }( t6 _' g  Q- h
/* Starting sections of the McASP*/
: m2 G2 ]4 n* E# ?! f5 z  O    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
7 b0 {; r/ j9 [2 y8 `' P- j    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
5 j6 B: L5 J' F: O/ `; d    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
' x6 h4 |3 H4 u2 c    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );+ `- ]6 x/ L. {: w" ^4 _4 M: i

* w6 V' J6 M7 G2 M6 A  c$ B) T# i    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 6 \8 o# @9 [7 |; [$ s/ q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );0 G4 A- P, e6 T1 k* ~  }: N4 g5 L
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; & ?9 s% q8 L, P; Y/ ~8 Y; u
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );8 i) ^( V+ w8 O# e  Z

# f( r8 @- D  ~& H. e' z    mcasp->regs->XSTAT = 0x0000ffff; ) ]8 @2 P  T/ R8 L
    mcasp->regs->RSTAT = 0x0000ffff;   K* S+ s" ?9 Q: Y
% N, F- W6 _5 M2 t& |  M0 D0 e
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;/ z1 s  t. i1 I1 w7 e4 S: W
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );! |# p( A! z. S( M" @
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 0 D6 L' {) Z( F" e* d8 L, z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
% S1 ?+ _* r* j$ H" B. A. M' ]2 h! S! B% B6 B4 h
    /* Write a 0, so that no underrun occurs after releasing the state machine */. U$ x! f9 D( S7 i* b5 r3 Z& n7 k6 h3 {
    mcasp->regs->XBUF5 = 0;/ \, L0 Q- y' |" K  Q8 G
    mcasp->regs->RBUF0 = 0;
9 H2 y( B: e; Z  `2 ^
+ d2 F! B# c! C$ g: L. I    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; / o* U) K/ T1 @3 B+ M& r
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );7 ~4 T: m0 x1 N6 O. z$ r( L
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; " I+ `! ~* \  w0 G
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
+ t% {! c8 \2 n+ P& L; N! D" {  F2 ^2 r, x
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
4 h8 ~+ f5 Z6 @5 R1 n' @! `    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
. y) s% _1 J5 V8 |    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
9 Y9 ]9 V" r' u8 y0 E    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );% B. O) P1 L" {2 {* N( C
4 M" Z8 V4 n0 P- o3 n# B
    CSR = 0x0000;; t+ b  Y  w' E! _, C
    INTC_INTMUX1 = 0x3d;
( \. i% T! W" V0 Q    ISTP = (unsigned int)vectors;
3 Z  m' V4 j  i- Y1 r, K    ICR = 0xFFF0;  4 \, M9 S! O$ m
    IER |= 0x12;  
, N7 Q9 r4 y( l" f6 s    CSR |= 0x01;  
. _/ C6 r8 E' M3 ~# [
* B; D, n$ v" l/ y. ^  r0 }- U8 j5 r- x* Q$ T, e% T/ M" Z
7 P( R+ @4 O# u# p0 o- ~6 N) e
还有就是两个输入输出函数:' \( p6 {! m: u7 `8 \* b: Z
void output_sample(Int32 out_data)+ O( G0 Y2 ]8 t" Z. v4 q
{
) r' F" _$ w& s- Q  AIC31_data.uint = out_data;  7 m/ G* Y3 g; l* [- O8 @
  MCASP1_XBUF5_32BIT = AIC31_data.uint;6 p4 R8 ^+ \7 h4 u- w/ U; y3 d
}3 d9 o5 R$ b. q* V7 w

( Q2 r& @& d: \Int32 input_sample(void)9 m2 w* d0 S; ?0 W( m
{  
( f: H+ i0 c5 x5 Y2 N: m5 _# {  AIC31_data.uint = MCASP1_RBUF0_32BIT;8 B, }- H4 K: k; U$ {4 ?
  return (AIC31_data.uint);
0 s% K( `9 a# r5 o; `5 K}2 Z' x6 T" }" r

; T# b: l$ S6 t4 e3 G% E5 _
分享到:  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-2-8 11:57 , Processed in 0.041135 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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