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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
5 E9 U  r, N0 K  @- Nmain文件:5 t) |7 G5 K; ?5 p8 O5 [
interrupt void interrupt4(void)  ( D% q0 y. L" w' K4 z6 }! W
{6 L+ k# m1 `9 r& a/ x
  Uint32 sample;2 ]% d  g/ I3 C+ q3 G6 E

! d4 v. @! \3 `  sample = input_sample(); // read L + R samples from ADC
, V# p3 \: o  W/ D  output_sample(sample);   // write L + R samples to DAC
  D9 O5 O, e" V+ K7 T  return;
3 @, b7 ?: x4 W5 ~8 d" @* j1 k}- e" E( Q( G1 `) {2 W# H

6 F/ E" q( S. f8 p3 t, v4 x2 {8 Bint main( void )0 g$ T( ]( x" I" |' o2 o" O* i6 i5 a  B
{
& ~* q: t/ z$ ^; o, S
9 h1 F6 q* k" a. s; W: Z    /* Initialize BSL */7 k1 ?' M7 b, C
    EVMC6747_init( );
) g& G/ b% b% d5 |2 J3 j, F7 f5 Q        /* Call evmc6747_intr function */2 w* K, C/ H* W+ B2 v7 t1 A
    aic3106_init( );
) i2 Z0 y: K5 P1 Z        while(1);
" M: C) T! x6 g6 R* J1 v# D) T}
: D- l6 n" c4 ~& I# s- \
1 `: j# r' ]+ {7 t& V6 S, {; n+ m( f' `% ~/ ~: T
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
; y- L" A- s  U' F0 r' ^2 B# _/* Initialize MCASP1 */3 z+ h( [+ c% U
    mcasp = &MCASP_MODULE_1;: u, n) @) b, ]) f" b8 U) I' V: u
    mcasp->regs->GBLCTL  = 0;       // Reset( \, f) H: d/ {! Y
    mcasp->regs->RGBLCTL = 0;       // Reset RX& u1 h( ^; R  p$ s2 q$ F
    mcasp->regs->XGBLCTL = 0;       // Reset TX  E; ~/ d; N5 ]6 Q$ l' R  V, [" s
    mcasp->regs->PWRDEMU = 1;       // Free-running
" V% v+ n9 o5 u# j; W0 J   // configure McASP0 receive registers
7 J2 }& [( K8 t7 F8 v    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
3 W+ R& k# E; ~' e$ Q; V# c    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ {1 a$ D$ D( _; Y# i9 {% [+ R
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word2 `. s1 `6 F4 h. N
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
; l* U; f( z" A) |, {) q    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side). s/ n. Q: G1 h4 N, Q. F
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
  b7 N& H& n- Y/ e9 p7 v1 b    mcasp->regs->RINTCTL    = 0x00000000; // Not used
1 ^/ O8 z" W2 \2 @/ `    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' x* ?, h- q/ J4 s* q$ h( j
# M, K0 \; K& Q( k; O, L8 `4 s    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used1 |' H: L" b- {. o! {! W
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus% b* \% Y; V' Z7 B2 i# i7 f5 N0 T
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
0 p8 F1 m( ]% b    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
! n+ @* }5 l% e  V: V    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
% _$ p  |9 j: c2 `1 c2 t    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
5 K* ]; S$ u5 ~! d    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
( Z9 }' X, S6 X- \: ]$ {) ?2 L    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
1 M, W! C8 ?2 `, w. r8 e4 m! _! v/ _! ^( E' x- L0 D0 r7 D
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
' g- j0 z, q4 z9 b- J    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT) ], a2 n" O7 L4 A3 V
    mcasp->regs->PFUNC      = 0;          // All MCASPs
- L' J  E5 i1 H6 r6 D$ P* k    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
6 k$ m  h% i4 M2 ^1 X3 j, _2 Q& N* x' Z
    mcasp->regs->DITCTL     = 0x00000000; // Not used; ~+ t. o& R7 y
    mcasp->regs->DLBCTL     = 0x00000000; // Not used' Z: T& ~/ z, d7 q; R8 i
    mcasp->regs->AMUTE      = 0x00000000; // Not used
: Q. b5 _8 ^# C. T# a2 v
# N; P' x* ?2 Q) r0 Y/* Starting sections of the McASP*/
5 N# M- g6 e; o: @3 b    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ) a1 D- }- F  n  U! P! I
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
' ^$ F: ~* T: X8 T! H8 t9 l    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
; e' U! e" p! P7 t: g2 `2 V" C    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );: ~' z; _( k% Q; _* y8 o* _7 a

# Z$ @3 V: M* E! g: V    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 9 \  O' d6 {# P/ F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );6 K5 ]; R6 p0 P
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
  |8 ?) H, T6 B/ X* v5 `7 i    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
$ f$ I' Q% }; l# c7 z
2 r& T' w! Z. d* D7 k    mcasp->regs->XSTAT = 0x0000ffff; 6 B' n* K# r2 P5 q4 k1 a
    mcasp->regs->RSTAT = 0x0000ffff;
/ ^* T4 R& j$ _
" x1 }" n% S2 g% v    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;% B+ I+ ~& P, D, b% B/ R. |( ?
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
+ P1 q8 }1 }5 G# Y6 ~    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
* F, C  K- v7 `, v; Y9 c9 l2 `# M' e    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );* M& \4 `' Y6 H, b& t0 \' r+ Q$ i: k
6 n! |: A: \3 d- K; \0 K# x
    /* Write a 0, so that no underrun occurs after releasing the state machine */% W9 N) Z4 P5 l2 A7 [* @, L$ D4 T+ {
    mcasp->regs->XBUF5 = 0;
, {* @3 H+ O: d6 p+ z+ b    mcasp->regs->RBUF0 = 0;
- ?& Y$ d2 I/ e% i6 M' c; b
# c" I3 W# Y. F; r( _0 i    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; . \& B( |1 Y8 b& o& y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
* t* v! s6 x1 |. a2 }1 q    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ; g3 Q# |6 N3 g
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );; u% \1 L8 v/ a2 E$ Z

4 B5 J& d3 `+ \  y( M" T; s$ O    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; + B8 }4 @, Y5 [$ P
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );% d- t' b! C; F3 G  j  |
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; : L" D( j$ J7 R, `( j. ~
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
5 y& {3 _: R% z' r! K; y
$ X: v0 q1 K( {    CSR = 0x0000;& n8 R" u( [' T4 v  d
    INTC_INTMUX1 = 0x3d;
- z4 D  n7 H7 g* f    ISTP = (unsigned int)vectors;
6 R4 t  b; l3 x1 e    ICR = 0xFFF0;  
+ z" A4 x. B/ P& S9 j& z    IER |= 0x12;  
1 z# j, ^6 e: D4 ~    CSR |= 0x01;  ) y5 y! l/ M  p) e( e6 M1 p% \
1 C! j! p" X& f- ?. q# |+ p7 F! _
; ?4 j- @7 K3 ^8 w) a3 |7 Y
1 Y. n2 s. e. R8 J( A9 ]2 h
还有就是两个输入输出函数:7 l& m9 {2 z7 l
void output_sample(Int32 out_data)3 z  n/ A( }( l# h5 J6 B
{
( B( C1 {# R. H4 C3 y  AIC31_data.uint = out_data;  
+ I: L& B; M) M" v  MCASP1_XBUF5_32BIT = AIC31_data.uint;
4 n2 ~; S# H% V}4 {0 y. V% N! e

6 [% i) `) e! X/ |6 Y* D9 b: cInt32 input_sample(void)
' F0 G6 h8 J1 M2 {& v7 O# t{  , V# K& T8 h, S/ H, U
  AIC31_data.uint = MCASP1_RBUF0_32BIT;+ u  D' `9 f# t5 T
  return (AIC31_data.uint);
0 _' N) M7 X& f+ W, [}7 [/ \3 h4 b. Z2 ]6 X, {( |6 W4 @

4 C" K1 V: F4 l& b& l+ c/ C
分享到:  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-6 11:27 , Processed in 0.043052 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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