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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
# ^  [0 Y# ^% mmain文件:  v6 e6 D; K5 J* H! O% w* s1 R
interrupt void interrupt4(void)  2 h3 Z+ V5 R: f
{- P& Z3 _# V$ z
  Uint32 sample;& k+ j; _5 s" _- E& g% p- v
, A" |. ?, `; ~6 W- a& Y
  sample = input_sample(); // read L + R samples from ADC! ?: @0 Z+ H) C5 b5 B: R
  output_sample(sample);   // write L + R samples to DAC 7 |* X) P, R8 L( V
  return;/ `, ~7 e. D0 d
}0 T+ \, `  `* x6 T2 B& u

0 H1 R$ c5 ]& T8 M; H. v2 aint main( void ), ^- u2 u) f1 x0 [
{7 L( c# a' i2 ]

. W/ u+ K3 Q1 T( x3 E    /* Initialize BSL */1 f4 C( k0 F, O: \
    EVMC6747_init( );! B6 b/ C4 }9 k3 g/ |6 H
        /* Call evmc6747_intr function */
8 g9 U" A$ E6 ?- Q3 U6 d* H    aic3106_init( );% h# A6 N( @+ f7 \& M' R
        while(1);4 c) J0 z+ u9 S6 D  D% ^
}
0 y) P; k; E: B2 Q# [+ k4 H) _+ d
$ g; ~# R$ H. x8 S3 y8 W
, V6 a+ X& D$ }. Raic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
6 }; s6 y% _( ]* L3 s% Q) G/* Initialize MCASP1 */9 h  A0 E; L" c( M4 h, H- I
    mcasp = &MCASP_MODULE_1;
( p! @! s6 K2 J0 S# f; h5 ]    mcasp->regs->GBLCTL  = 0;       // Reset0 t# x# V; h. v* D5 |; D5 k
    mcasp->regs->RGBLCTL = 0;       // Reset RX9 l$ z7 Q! T, }0 A$ k6 V# c$ C
    mcasp->regs->XGBLCTL = 0;       // Reset TX
% S7 }% s& M* p: X! ?5 e  l    mcasp->regs->PWRDEMU = 1;       // Free-running0 w, C- H) G' r! J$ z+ s/ {
   // configure McASP0 receive registers! p. p" Z& }# A, f
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
6 F4 E- V& l8 \7 M" ~    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. z2 a1 x. `& Z- I5 W% I    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word' v; F$ f5 y% S/ r7 k
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)1 ~! Z7 K$ Z5 T$ q- i0 B; H6 o4 M
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)" _: ?+ a7 W9 {: X: I
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
% [# ~- N4 ?6 f6 c4 @0 N! y    mcasp->regs->RINTCTL    = 0x00000000; // Not used
' p/ ~4 h- t9 a; ^2 f' A4 k( k3 ^0 e( _    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
2 A* D- K7 R9 O4 @$ L1 f% ?& X+ |# a6 w
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used" v8 W7 ~# l. v7 ^
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& z; R$ E/ w8 W' }1 X8 X    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
2 W$ ~( M$ O$ J( j+ l    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16* ^/ s# z7 B/ {' ~) S
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
$ p5 e) X, L- I5 G6 F. R, r3 N* z$ ^    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1. J7 b2 w2 Y3 X+ p4 N2 ]
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
3 Q; q$ s: w' t4 T- n" |! f    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( K7 e' @6 r% g+ @; G/ h0 D$ v8 C- t2 y* L% v# O1 @. v
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN! ]( i$ x; C/ _, o, Y
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT& L( n# _  `/ a: X
    mcasp->regs->PFUNC      = 0;          // All MCASPs' z: q+ I7 w4 |0 i; R- X5 v9 y
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX16 C6 N* R, a. x: x
4 N) z; |9 o7 f5 P% V
    mcasp->regs->DITCTL     = 0x00000000; // Not used$ ?, ^' d$ \6 B/ {$ [# h0 V: @
    mcasp->regs->DLBCTL     = 0x00000000; // Not used& b( B5 i' u+ `6 a. k+ X2 O
    mcasp->regs->AMUTE      = 0x00000000; // Not used
2 o1 E7 I' J2 o4 ?, d' ~% I. C8 N! L7 Q
/* Starting sections of the McASP*/
9 G/ E+ p  f, r6 |0 Y5 I    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
4 I' k9 |2 ~4 `    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
+ z7 y& c! P% k7 C2 O. J# |    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; % @$ r/ G1 l0 n" m" `1 O
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );- U2 y, P+ Y2 D, D; {; r
4 f) R) i3 ]$ H9 H2 G% d% `0 b/ Q
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 2 b6 i. i+ a) F1 z/ J- L
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( f, T( e& W1 W, P
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 0 V! K: i9 }) F/ ]: c& S
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
% P& ?! j$ s6 E" N- C
. X% x7 p0 o  H# J+ |, d( L    mcasp->regs->XSTAT = 0x0000ffff;
) L1 w8 r, n! l: c' d3 F8 [    mcasp->regs->RSTAT = 0x0000ffff; # b$ }: z  y. k# a
! j3 d( ~0 S+ B$ O4 \
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;% K6 Q' k# Y" v8 c; k4 [
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
! i( h5 p9 S5 m  |. N8 V    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
! X3 L' U  ^4 p7 W* l6 ^1 I. }    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
5 e5 u" y8 V4 Y2 E0 G/ |5 h
, [2 R7 J% H6 m, }. O    /* Write a 0, so that no underrun occurs after releasing the state machine */
3 M0 n- n+ F: S    mcasp->regs->XBUF5 = 0;* E' j  o! @9 Q: C
    mcasp->regs->RBUF0 = 0;  W3 I+ f# v6 w# y; u& Q4 \
$ I( ]* h. ?8 [
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 9 b7 B! ~1 }' _% G4 v
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
* M  H5 `) L5 b* l5 W; L# X5 t  q/ M    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
$ T, o* d$ U2 |2 Y3 P; _; e    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
5 D( @) F/ D! f$ e2 C0 }
, \% P/ M. g* a# m" \. f, _4 x! z    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
, K: N# S' k7 Z& o    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );( L+ g4 y7 J1 @, I6 b/ v+ c5 a
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 1 Z% v$ I9 ^# b2 s9 O4 D
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );6 |! u2 N  m/ ^% j6 N, m
  D6 ?( x$ d( _! z- R
    CSR = 0x0000;; f7 O& Q# s" Y4 K+ r" k
    INTC_INTMUX1 = 0x3d;
' d$ k3 M" |2 j( c5 `7 J7 z    ISTP = (unsigned int)vectors;
$ z2 C+ J  A# C% L% v% A) ]    ICR = 0xFFF0;  
3 m7 Y8 P' d6 C3 C    IER |= 0x12;  
3 O. A0 f" A( ~) M5 Q    CSR |= 0x01;  
2 b% e6 [- Y% U. s% h; h
& q, [5 b: k0 g# ?2 r6 B' O8 p8 b4 K" A4 W  w

- X8 X/ Z7 s, J6 m还有就是两个输入输出函数:- ^" \8 }% p; q6 ~$ U9 X7 g9 _8 K
void output_sample(Int32 out_data)
% |+ C% ?* \8 @; j9 T0 E+ s{& W4 r, h3 u! k5 s. e
  AIC31_data.uint = out_data;  
- K7 F/ y+ ?) u7 c) B  MCASP1_XBUF5_32BIT = AIC31_data.uint;) i) j) s, \9 s2 ]
}# [) N1 `% A' M+ ~
& g' v! S% Y, J
Int32 input_sample(void)
/ _# i# P" M" h; _{  
# c( \9 K) N9 ]) \* e  AIC31_data.uint = MCASP1_RBUF0_32BIT;
. S7 t/ X% O5 W5 v* O3 V  return (AIC31_data.uint);8 m' o- m4 h* g8 k; @" U
}
$ S) q+ E; e4 I8 m# c7 c4 L$ [* b" `$ h- ^. [. _' h4 N0 h
分享到:  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-1-30 01:35 , Processed in 0.050867 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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