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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
% ?" W' I/ ~' F1 `9 F" U0 tmain文件:
6 ?) g. r5 D7 w! s( N9 f+ \% Jinterrupt void interrupt4(void)  2 p8 P3 g9 `% h0 H) D
{
3 C/ F2 f# ?* s  Uint32 sample;5 K' S8 T' P" _) T! x9 M  G
9 P* k2 u5 w% N! r5 R( m
  sample = input_sample(); // read L + R samples from ADC3 [% N: P) H3 N! y1 H9 N: F
  output_sample(sample);   // write L + R samples to DAC " g2 S: u  Y3 u: M
  return;6 c( o+ i! L. P0 B( r3 g7 ]
}7 `7 _8 c$ Z" y

$ S: g8 R5 k. K' Y8 E" U2 vint main( void )" b# C8 T: b  Z4 u
{8 A5 P8 u! V4 k  \, A

# K' Q+ @5 U* f" u    /* Initialize BSL */
/ H" U( P" C' e2 h; Y% `9 }; o    EVMC6747_init( );
- a0 B2 ?+ `0 y! h7 Z4 Z& D4 @2 [0 t/ s        /* Call evmc6747_intr function */
  X2 F% t$ ]! Y$ x" ~+ u7 C    aic3106_init( );4 a) T& V6 h" a' Z) w$ J
        while(1);* j: m  N* r* C  V3 w+ g
}( h; j6 H$ Q! ]( f3 Q  C7 U

7 ?; V" d% ^/ q- t2 K8 ?) k" i2 Q5 M$ V: w' x. w- a/ R  t
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
5 b" _7 k, l, s' N1 {  D- p) v/* Initialize MCASP1 */* }$ c& g! \% J0 Y0 B2 G9 F
    mcasp = &MCASP_MODULE_1;
9 d/ q3 f7 l+ x2 o8 M! b0 e2 a    mcasp->regs->GBLCTL  = 0;       // Reset% T5 Q7 @1 {8 a6 r$ e) c& q# A, {
    mcasp->regs->RGBLCTL = 0;       // Reset RX0 j, x; ?* g; [5 W0 q" M: ?6 e
    mcasp->regs->XGBLCTL = 0;       // Reset TX$ _  B) o" n: }* [3 c2 P( M
    mcasp->regs->PWRDEMU = 1;       // Free-running
# J: C2 b- H. Q. C   // configure McASP0 receive registers' j, u# W# g% Y' x8 G) z, f. H
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
5 z5 U# |0 l# Q; e9 a( x) o- X    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
( N% ]6 @; Z0 h3 d0 A% Z3 d. U    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word% B1 v/ I0 A6 h
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)2 z" d# Z+ T; ^% w, t+ X$ ]; w; O5 w& n* ~
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)5 J' Q  f5 x% L! j0 m! o/ B
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1: w+ ~( s; n# O
    mcasp->regs->RINTCTL    = 0x00000000; // Not used# D( H. l' ^- j" a. M
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256# U- H1 w0 c7 c; w( B

- X7 }: {7 j# H8 @0 C3 Y% N$ C# @. d    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
& [9 y6 V* S" ?" ~) G) q, @    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 s8 z( l$ V# G: F  U# k    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
% @7 t* R$ u& r5 u/ T' w    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
- ^0 L* u; p2 a    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK: u9 U7 J" a; T! r1 S& R/ Q: ~8 M
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
. F/ G& j+ r- N$ v1 a    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
9 L* E! v5 i; Q- `    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 X! ]# a, Y$ C6 v
( ^- R3 F1 j' q* B$ M    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN' S: B% L. R$ E5 W4 P" U- h$ e
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
. u* l7 X0 E* x8 S7 q! ^    mcasp->regs->PFUNC      = 0;          // All MCASPs
9 X# G1 A' Q9 A' c& @9 T* G    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
- R+ a$ N* ?3 O; V6 V
; ~) \7 H$ M* P# e( @( F; t$ X    mcasp->regs->DITCTL     = 0x00000000; // Not used
9 R- h) ?; w7 M' x. D    mcasp->regs->DLBCTL     = 0x00000000; // Not used
$ C& U/ q  H; A! M3 K' e" \  G  l    mcasp->regs->AMUTE      = 0x00000000; // Not used3 V( A5 y( g/ m1 J+ \

' H: V" M1 W& u3 J! Q3 f+ M& ], N/* Starting sections of the McASP*/- K8 l) g6 N* q" B2 \6 l
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 4 l: Y) P' v4 n' K% y; V
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  % }" N. H/ f1 [
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;   U6 h* K* E* K  D, P+ P9 r" _
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );8 ^) _1 E& P8 c+ U0 c9 ^6 C

5 a5 v: e3 r  q2 M# N9 E    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
2 i, N. Q$ d" O3 f) E) o2 L  z* a    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
( V; s3 ^8 _7 v" v5 |- }$ [    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 4 Z: s! y+ L# F$ L. }
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
* H5 M+ w" p) v1 {) p; N4 ^% E  D1 R/ v. w- f  I* Z
    mcasp->regs->XSTAT = 0x0000ffff; 0 F- C1 S# `0 W* g, |8 k
    mcasp->regs->RSTAT = 0x0000ffff; 4 X/ D2 G, w+ r. O  j: _
! E+ |; U3 g% E8 Z2 J! P5 \+ W, [
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;: [9 K4 q* X! C) _
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );. r2 M/ S5 b7 z/ s) v" z% i/ T
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 b6 @1 }# t1 a: V$ A; Q2 ?
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );% ^1 f2 I/ b. t7 p5 R
% E3 M. C6 }5 v( }3 O8 t2 E$ s* ^
    /* Write a 0, so that no underrun occurs after releasing the state machine */5 w8 v* J4 {0 C8 D9 M$ O/ X
    mcasp->regs->XBUF5 = 0;
% d( L9 K( m6 @0 c1 A  r! g( }    mcasp->regs->RBUF0 = 0;9 u4 l5 b0 Q9 S7 d- I: b5 C; a
) h$ g( p" N& e5 J
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; # k) g- i9 [& [- ?/ N+ `: b/ X
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );+ F4 e! f0 S) c, B/ W( ]& j
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 6 r( J- @8 X0 N: A" [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );5 Z) W# I4 O# U
0 t5 h4 U! ~4 I* ~
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; . A- f9 D( e9 I0 z% u
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );, k+ j8 F# a% L# W, ]3 n& A: P- w/ c
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
3 ]: U! {; t$ b# D    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );2 b! Y& Z8 y  y: D, Y# U
- Z) `% k6 ^( p$ q) x$ v! O, @
    CSR = 0x0000;5 V. ]' g% V7 C. E4 |1 B+ b
    INTC_INTMUX1 = 0x3d;
# G* k! M& ~2 N, t3 w' g/ V: N    ISTP = (unsigned int)vectors;" |' H0 F  A! R, b
    ICR = 0xFFF0;  
5 S- G7 ]6 j5 s2 t6 C! x# y    IER |= 0x12;  0 W  u4 ~+ c5 i$ {9 \
    CSR |= 0x01;  3 [% j% q/ m4 n
# W# e3 |( e  b" j9 ^, i
8 Y: x5 h* \4 m! f9 V/ J

2 j- s' x9 {0 x, r# D8 h还有就是两个输入输出函数:3 [5 F: ~/ z# ]
void output_sample(Int32 out_data)
% {% G. q6 J7 T4 x( i2 E1 t9 K  F{
" b; r+ x+ S# e  w$ `% e) N  AIC31_data.uint = out_data;  
7 \8 A' A2 ]9 ]6 I6 Y% }- M7 G  MCASP1_XBUF5_32BIT = AIC31_data.uint;
1 S) J. W- [$ [/ z( `4 m; P: [4 f5 P}
8 G  }$ L1 k: u3 M
2 `* ~7 T: {* N3 m' PInt32 input_sample(void)
) Z3 }' H. S1 p! R0 E{  
6 o' @9 q8 U. o& t1 l  AIC31_data.uint = MCASP1_RBUF0_32BIT;, S& m6 l" q3 h
  return (AIC31_data.uint);
8 I6 b% h* j4 @2 @* y/ ]}
2 T4 E9 a" H9 I! O3 X# T8 O9 t) Z# Y8 |6 Q' B, c# y5 \  ]
分享到:  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-6 14:04 , Processed in 0.050270 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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