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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
; d  O% X* `! j8 `0 U  B$ Jmain文件:& S; F) y, I4 h" U( v6 t
interrupt void interrupt4(void)  
3 `' E3 B' b2 J. Z6 P. a' r3 L- v3 F{; E( `7 a3 @. ~/ V3 ?
  Uint32 sample;: B0 t4 B/ |0 d+ ]$ u2 O
7 F5 D/ B! b1 r2 S/ T8 R/ d
  sample = input_sample(); // read L + R samples from ADC" u9 Q) J" @+ d- J: `
  output_sample(sample);   // write L + R samples to DAC 8 ?7 ]3 e$ b' V; X/ n$ C! }+ I+ g
  return;. j% v& M# S8 ^0 [, a. F* X
}" z; G. s( ]" Z* F$ M

7 m1 B" A1 p9 r8 Y5 _int main( void )5 _$ }+ C, W7 I8 d9 \3 P5 I
{- G6 G9 ^) F# F3 ?( ]! T! W, M

5 T0 s/ I* ?( D& s    /* Initialize BSL */' K8 p' S6 C3 l: Z4 i
    EVMC6747_init( );
% j5 T% u$ W- V        /* Call evmc6747_intr function */
2 |3 Y2 P: ]4 C! i8 Z& x    aic3106_init( );3 b6 y+ S/ S" d0 U2 o/ W
        while(1);6 `, h" t( `. y
}
& l6 F6 T0 }. `2 O+ Q
& W9 X0 _% P( d8 S* y7 [2 Z' f) @4 P4 t8 E
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
* m% {0 p9 u+ h/* Initialize MCASP1 */: j  V7 V; g( h  y
    mcasp = &MCASP_MODULE_1;4 C/ F3 U  z  A. [! F# ~, B5 ^8 F
    mcasp->regs->GBLCTL  = 0;       // Reset! d- D6 t5 L/ Z$ I8 M& U3 p: F$ e
    mcasp->regs->RGBLCTL = 0;       // Reset RX
9 y' N! p( Y. s( V8 |' x. K    mcasp->regs->XGBLCTL = 0;       // Reset TX
0 Q$ V0 r6 l8 ?    mcasp->regs->PWRDEMU = 1;       // Free-running2 `1 e  e8 P( l6 v1 Z0 h/ z
   // configure McASP0 receive registers3 m' J% U! W* y0 n& I. K$ Q
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used% X4 l$ ?% X5 h5 g  t
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
) N$ |4 {1 ~4 o    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word' e0 b; I7 x& q0 W
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)8 H4 @* N! b3 M9 e) p
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)* s& t* p2 b; }* A0 T. r3 V- i# o
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
8 c& j3 J! A! j2 f    mcasp->regs->RINTCTL    = 0x00000000; // Not used! s- R; F, Z7 S" J" B/ m5 u
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256) i+ v" L* e& B3 u8 E# x

0 X- O6 {) {" B, X4 }6 e    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used$ Z8 ~0 l) X+ A1 s8 y* S
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 R2 T0 ^( M) B/ ~% Z
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word: R0 ?. b& O  }
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
  ^& n9 f. U- Y' z    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK: L! e2 r4 A5 V. s. K( e
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
. Y  i& Y/ n8 ]2 {    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
7 U( [- A) P6 L+ p& t% s1 @    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' n" _4 E1 u" m% X2 p1 c8 l) C* E$ L
; U9 J4 w& |- z& q
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
4 C8 u; {0 t+ p0 \& T! W    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT! R" D- p: }( ]) V5 G" C
    mcasp->regs->PFUNC      = 0;          // All MCASPs1 T; b9 v* Z8 A- \; P9 x: k/ ?' J
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
  U% i  u$ {; L/ f' D8 u$ {8 u1 M( C  F7 s9 \2 b
    mcasp->regs->DITCTL     = 0x00000000; // Not used" Z! ^7 e) y, `0 T# c7 P
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
1 O+ i- h, a6 b    mcasp->regs->AMUTE      = 0x00000000; // Not used
2 u, j; O6 i  J6 m% B% k  A: P  a" `5 ^0 E* H+ X) A0 M& M/ V1 I
/* Starting sections of the McASP*/
+ J7 u, R8 C0 j" ]1 C6 ]    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ' U. T5 ]0 r* P
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  / t" ]- U; I1 g3 a8 c
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
& K& n3 J3 R4 K5 W% N8 `    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
) N( i( ?. A  }" [' i7 z, ^, K2 O7 B/ e+ W9 W% x( I' b7 ^
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; : n$ a1 W3 L" T$ Y. p+ u# J9 B! f
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );* x  S9 A; u) o6 }& }: E1 r: Y
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; - n9 d0 ~9 I3 B% P1 A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
3 X( B. o% H, `- ~/ W3 Z% {- P% J" i5 |
    mcasp->regs->XSTAT = 0x0000ffff;
) [* H/ K& x" o6 h8 P8 B( {, w    mcasp->regs->RSTAT = 0x0000ffff;
, p6 u5 ^6 w) N
# Q2 Y1 p2 C6 k. I    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;/ o3 c2 |7 J8 O; j! [7 P( l; k
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );( U3 b8 r! a$ _- P
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; * Q1 t1 J% L, C) h
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );/ x9 ^# t3 I( J$ M; D2 m7 x; n) f

5 k* S8 {4 y8 r    /* Write a 0, so that no underrun occurs after releasing the state machine */
! i2 k+ h" F7 D5 m9 j8 a: Y. @    mcasp->regs->XBUF5 = 0;
: e& {9 m" y$ l2 ?+ d" t% g    mcasp->regs->RBUF0 = 0;
9 j) G9 p: G) G  ~* r% l$ \) O: t+ z, S, M
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
) @+ o8 N% r5 C' s' x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
8 C7 `* u) u/ ]/ p+ C4 m1 u- {    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
! n" k9 g+ V! p3 a  V4 N* ^9 R    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
8 B$ z9 r7 r; j# D9 W
+ J( X3 k8 d6 ~4 i6 Z( V  j( F$ s    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
4 W1 Y# T! J$ x; W    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );3 F# S3 \- @! G2 V
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
' ~) O: a8 Y2 i% i    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
6 F6 H" r8 N; U5 y/ B
5 n+ N8 j& v8 z& Q0 O8 V/ X    CSR = 0x0000;
: ~5 f; Y: l- S0 G/ G, L2 H4 j    INTC_INTMUX1 = 0x3d;+ @# i" O+ R6 l" m5 F0 |
    ISTP = (unsigned int)vectors;- D! o2 j" g- F
    ICR = 0xFFF0;  8 x+ `! j: R3 v7 O$ a2 R
    IER |= 0x12;  & \8 s# ?) |3 _/ R5 m6 j$ A
    CSR |= 0x01;  # f, S# ]- H0 Z& P- w; r

$ T$ B1 a3 ?4 S' _6 [2 e7 E  w" w0 N8 I2 j
7 F2 W; Z7 _* m3 U: [/ {& V
还有就是两个输入输出函数:! q+ f& J- m  _" `
void output_sample(Int32 out_data)
$ v- l: ]& ?! s% |6 q8 |{6 j6 q: Z0 f; q
  AIC31_data.uint = out_data;  - ^1 N. n6 \( W  L
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
) f  w8 e4 \  V6 Q+ G  `}3 `" V4 N" ]( {0 G
8 [3 K/ q( N7 }9 e5 [( E
Int32 input_sample(void)
5 \, h8 w5 s) ?{  
7 J) S; l' s: u. E- |  AIC31_data.uint = MCASP1_RBUF0_32BIT;  h8 B4 I' e" y3 ]' C6 w
  return (AIC31_data.uint);& H% _5 k; w+ f) b2 E0 Z0 m
}3 ?' P/ `3 m6 U* ^0 p; g0 E( c
9 A. c( x! @6 h3 B; O; Y
分享到:  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-4-5 21:37 , Processed in 0.041209 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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