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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
% s0 h( b4 l" |7 l0 Xmain文件:
6 Y: ^, H) _& Q5 a5 R. dinterrupt void interrupt4(void)    Y$ ]0 b* g: U" B( Q) Q) A
{6 t, y  m0 K- I1 e$ ~
  Uint32 sample;
+ g- m, n* [! Q8 W7 i" d% z5 y
7 X$ N1 U9 Q2 t. m' R  f/ a; O! l  sample = input_sample(); // read L + R samples from ADC$ W' x) q# L" G* I; G8 N7 U* [
  output_sample(sample);   // write L + R samples to DAC
/ Z6 Y4 |: R: ~0 f9 x0 ?' q  return;7 k* b! n' H0 s. t% ^3 C7 N/ f: S8 M
}) l- E  M8 ~- @. M6 T0 m/ k3 n
0 K9 {+ B9 r" y; I$ {" L/ M
int main( void )
/ b+ Y0 R0 D$ Z8 x7 A  O7 [{
# `) K# G: _" o: }% S
0 R  O/ M7 C5 ^( G! r+ }) y    /* Initialize BSL */
% E; {% Z, a& s0 u/ X    EVMC6747_init( );! B: I1 K7 V, K! `; \
        /* Call evmc6747_intr function */
9 Z# u# S: b& b& [3 T* h    aic3106_init( );) \4 H1 V( F0 \4 m
        while(1);
0 U8 j- L/ B& R7 r. d}
; Q' ?; ?6 R7 U( r$ q
( T# z. }/ H; P4 y% f9 ?: W
5 t# V8 y9 p6 p' C* Maic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题0 l/ ~; E) S/ `
/* Initialize MCASP1 */1 _6 Z/ l$ P" p3 U" p# S
    mcasp = &MCASP_MODULE_1;; X6 O  q  I$ g% M3 R# p7 k
    mcasp->regs->GBLCTL  = 0;       // Reset
' ^8 \$ n. t# E. W' X    mcasp->regs->RGBLCTL = 0;       // Reset RX
7 z8 X0 B, D! P    mcasp->regs->XGBLCTL = 0;       // Reset TX! |+ i8 W3 |5 X- |) Q1 W
    mcasp->regs->PWRDEMU = 1;       // Free-running
; ]  F3 {/ ~* @, |3 F0 r+ A0 ~   // configure McASP0 receive registers5 Z+ g) Z3 Y8 n  M3 e* g( C
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used0 k9 b( _) w- E: v
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 h0 U8 b8 ~* d) a' j2 |    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
# Y3 J" b" X& X    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)/ q( l. o4 A( }' K# W$ b
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
* Y7 T0 H2 h6 g! z: v+ f    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1: U5 _1 _& L0 c; n- y: R# _
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
5 s% e6 ?/ }3 K  v1 x    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 o1 C+ P5 j8 N* M5 T, i( F0 f# O9 u; C: i
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
6 }8 t. d' i5 U) @    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ l! I/ X' r+ {7 |
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
% c) h2 `6 Q1 T  v* n( u    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-167 b& E' O7 s/ D- q, D- ~( c
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
; B/ m# D$ W9 p0 F; C2 W    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
8 R( j, E/ V/ [, A9 G5 y" A( u    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit' y( ?' P# _5 W3 V; q
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* P1 J6 `) L5 W& _
% G9 H" z- c# Q. T    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN: l" J1 l5 N% A8 ]7 a. M
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
! O- M- j0 C' ^) N% m& i9 Q    mcasp->regs->PFUNC      = 0;          // All MCASPs* F0 E! z+ J& V1 K6 N+ h. K
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
0 I# v$ O/ b2 F/ x5 H# h: w. L# E5 W) `
    mcasp->regs->DITCTL     = 0x00000000; // Not used
) h! A6 G/ a' B- i; [    mcasp->regs->DLBCTL     = 0x00000000; // Not used
  t: `* R8 `+ }" Q" n5 A+ C    mcasp->regs->AMUTE      = 0x00000000; // Not used4 U& d7 |; O+ b, c9 d8 f, y

% u/ l  R8 Q/ P6 f4 {/* Starting sections of the McASP*/
3 i: @  [, h8 h    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
: M" J) k; I& Y: s6 p0 O' E    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  : p( V. Q6 X( ~8 V/ m' A3 R& E
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; & B/ m6 M2 q2 S& p- {% s
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );& \" w5 a. ^/ S# ?' S+ R) e. F
9 d5 I' X+ f6 [
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
$ W1 X0 j; q: E+ d" Y    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
- O# n+ _1 y( H8 e. r2 Y) f( k    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ( N" i: s& b( a5 y3 \& v1 o
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );4 s$ D% S7 |, i8 Y
9 u1 N9 g/ r$ L) U
    mcasp->regs->XSTAT = 0x0000ffff; 5 n1 U/ s8 [" M7 c
    mcasp->regs->RSTAT = 0x0000ffff; 3 L: N$ g: m! H+ t% m' p/ I

. F2 m! r# o) Q. T, a! w8 k    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
/ j6 [, l5 C- x$ h    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );# q7 O& e. u0 D! |" o
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
" b- c1 W1 [) [1 [8 `. z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );5 e$ }: B+ f1 s; \
7 X2 ^( ^. z1 Y! s* @
    /* Write a 0, so that no underrun occurs after releasing the state machine */" C+ q2 @! ?5 q' g! @) `
    mcasp->regs->XBUF5 = 0;, K' A' N0 T; r4 `1 o* L, ^4 Q) D
    mcasp->regs->RBUF0 = 0;: j2 R; L' _  Y& }5 v: ~
! S/ B! H6 _5 C+ {6 Q# c' I5 D. Z" p1 b
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 0 d! D: {& O1 j! v5 F/ M, q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );: Y: X: D4 L7 T; d/ v. O( ^
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; & d7 T6 c7 j3 n! u3 J6 `
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );: C  o8 J9 j% U4 l* i# H

3 r. Z+ q  R( h, P$ g    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
+ k5 z3 K# n' i) K$ X2 b7 h1 n    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
  H, _* i. M: L, _: U5 f) y    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
, I5 H! z/ f9 U* \& U    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
  g. s* r/ g/ d9 M( e3 Y2 g1 o4 x, z% j: t- R5 l
    CSR = 0x0000;/ l3 a& L) q& G6 c  [! k
    INTC_INTMUX1 = 0x3d;$ A8 }5 R: X( r( d* w+ Q
    ISTP = (unsigned int)vectors;0 t- M* k/ ]- o" P6 P! E- f
    ICR = 0xFFF0;  " n6 A  r2 c2 j7 Q. r7 r9 M; Z5 a( H
    IER |= 0x12;  
  k6 ]) e- h% \6 K    CSR |= 0x01;  
) S5 ]4 y! j$ G; a& J+ g. V' R! @; u8 A$ P4 J0 y# C$ s5 r4 p. D
/ Y7 y0 l6 o4 z9 a3 n! I

& z; C' @4 p5 y2 a还有就是两个输入输出函数:
9 [6 W9 N4 v# c0 W+ |5 J1 |$ O$ S7 K! bvoid output_sample(Int32 out_data)1 W) y+ E' i( N
{2 N* h2 n' q  n/ F$ \" p) b
  AIC31_data.uint = out_data;  
: _2 p2 g- R. s/ l  MCASP1_XBUF5_32BIT = AIC31_data.uint;
) V- h2 A3 v) X}
. O, N1 g0 l/ V  W' o9 F
5 T2 B# L2 T# _8 u7 l0 Z" pInt32 input_sample(void)
6 ]- n# m7 n0 r6 |{  . O$ w; ?- f* j, a
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
6 X2 ^6 k- f. _1 Z0 h  return (AIC31_data.uint);
5 [- b) g4 B! M" J& i8 u9 M6 X7 G}" a) u5 h4 \7 y# r  y7 |8 t2 o
# b7 z; U! X4 s
分享到:  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-30 16:00 , Processed in 0.041130 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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