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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:. [( L8 I: H5 [! P# e: U/ _1 e
main文件:% z; |' k) v1 v! ^$ C
interrupt void interrupt4(void)  8 E/ N% s: w% N$ H3 w7 M# X
{
2 H" o& t3 L, ]$ E/ f  Uint32 sample;
0 b* C7 b* w/ C- S: @9 Y! F6 @) e. b* f* D8 u# w7 P1 }  U( q# H
  sample = input_sample(); // read L + R samples from ADC9 ]* Z; ~, y' ]
  output_sample(sample);   // write L + R samples to DAC
( T; @: c+ p3 k  return;
/ P9 y, `% R3 j9 g}! u7 W3 Z0 V$ V3 x
- Q% A( J& n* \8 u% G- X
int main( void )
: j7 p  U- Z8 C/ }{! o1 w; E$ d0 y4 _8 l5 m* \! J: p
: Q; G7 M5 z2 ?% L
    /* Initialize BSL */9 O) V% O; |- o  ^! G
    EVMC6747_init( );
* a) u4 z# t( z% O) K        /* Call evmc6747_intr function */
/ b) ]# p+ }6 B1 C% W    aic3106_init( );
% ?5 J  J7 w" _$ r        while(1);
  V# o3 n1 s2 i. b5 m5 q6 b2 n2 _7 E}) m5 P; X) S) }  Q# K8 g
$ @. t) U" L8 ?" o1 b

7 M2 D/ C4 b, X( ^9 x3 U1 [% Naic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
5 o* E* `1 Q% E1 G2 X) k, h7 C/* Initialize MCASP1 */8 R+ L& P1 }  N% Z5 X
    mcasp = &MCASP_MODULE_1;' _( \) X5 @+ {9 u8 v7 {) P6 O' X
    mcasp->regs->GBLCTL  = 0;       // Reset7 Z$ w, E7 D4 `: T. q5 x
    mcasp->regs->RGBLCTL = 0;       // Reset RX5 ]; n8 z  C- v6 M1 s- j; m# H" R
    mcasp->regs->XGBLCTL = 0;       // Reset TX
. W! H! c$ W4 |1 [% i# W    mcasp->regs->PWRDEMU = 1;       // Free-running$ k' \& L+ V: m  s8 u" u
   // configure McASP0 receive registers
% Y6 s* V1 L9 f2 M8 f    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
# b! L; ^- }$ q1 x    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus( H$ q% Y# b! @- m2 F% Z
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word6 E( [$ ]# S* {0 k& n
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
/ m# l1 {) P1 P9 l1 M. g; R* P    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
6 u* [4 c- ?  \0 ~" D- \: R+ J1 v; Y    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
; {2 |, ^; t9 |- [  D" w    mcasp->regs->RINTCTL    = 0x00000000; // Not used
9 S( S+ u6 C9 x9 S  ~6 C" }: C% |    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" `6 b' [6 b3 d  c% L& Z# ?
' H/ w$ p5 M, J
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
1 U7 u2 K: L4 `+ w0 V    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, t' L- p( z, Q; C    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
7 W2 b4 Z3 f' z    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-162 ^5 P, e8 [) L
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
* R8 U! ~* O  J8 e% u    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1/ n$ h7 v  |1 G  }+ i
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit$ T2 g3 b1 Y1 x. j3 i
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' v( F! C5 f8 K& B% e! X
& ]$ `) U' H6 x! \. L4 U
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN3 d4 P( W+ `3 i1 r
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT" ]+ K9 s4 k- b0 A! X8 b7 L$ R$ o
    mcasp->regs->PFUNC      = 0;          // All MCASPs( l' x& I+ ]* |$ y4 A
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1- R$ U! _1 S& U" F
" ~, f# z8 s0 W1 U+ M2 L. P
    mcasp->regs->DITCTL     = 0x00000000; // Not used
2 J0 B+ \) L1 V+ x+ L' q% K- E- M* q4 K    mcasp->regs->DLBCTL     = 0x00000000; // Not used
. u& o5 m& S7 H    mcasp->regs->AMUTE      = 0x00000000; // Not used2 k8 a/ U# R7 C# X

8 ?. P! X2 j' r4 c+ ^- q+ h6 @/* Starting sections of the McASP*/0 g  [! r4 o5 e
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 6 `: D! ^# `) H, g( D
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
6 P6 j0 P) T7 E3 W    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; # I' ]) ]4 e; P$ P" a
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );- m! W; g/ n, I" w7 w$ h+ w8 ~

& t" N" O/ ]$ P! T" T# \* D0 Z9 y    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ) }# t+ }- g+ z2 M
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
% X; {/ x8 x) W  T; W& S1 R    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
8 n3 O- u" m  l    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );& N# N$ H- W1 D: j% R3 ^3 a1 j5 s
8 Z3 H( |0 S$ B0 D5 L1 u# h9 l
    mcasp->regs->XSTAT = 0x0000ffff;
" r8 }' G3 }  s, S2 ?7 l0 }  a; e    mcasp->regs->RSTAT = 0x0000ffff; 0 K) E( h& L/ Z+ n. V: V- j
8 Q9 R. i+ m3 d$ g9 G+ S. W2 \( k
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;% ^7 P$ G) C8 l% j7 w7 K
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );- O5 ]; V7 x5 O7 {6 {4 s0 ^
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 7 x; m  a# f6 B
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
0 @- E4 M4 w- X/ S: m+ }+ r+ q+ [( S, M* h6 ]+ R
    /* Write a 0, so that no underrun occurs after releasing the state machine */! H" F- t% e; v9 _$ o- }
    mcasp->regs->XBUF5 = 0;" R2 M/ W0 z9 N! O0 E' P
    mcasp->regs->RBUF0 = 0;6 q6 s( Y  l2 f4 h* P' L6 J6 A
# `* v" j, z9 U, i3 I
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 6 d% j" d6 |  z% x( ], c; A, `
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );! Z2 D; Y1 u3 L! B
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
4 e8 @; X& d& O6 ?% _$ Z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );- C! I; o0 T9 z

* E6 F+ w9 k+ H2 f) g    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 0 y' F+ Y4 V/ b( ^. E
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );) D5 B  b7 F5 E6 H* k/ @
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
5 F. d6 P, l, z  e& H4 |    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );& ^% }; W/ G2 ~6 G. u

% C! I5 |  s4 ~; U) f3 g8 z1 l2 C    CSR = 0x0000;
$ c  j" o/ ?4 K, G$ [  M& N9 }    INTC_INTMUX1 = 0x3d;5 c+ ]& \5 [. g( S' m3 S
    ISTP = (unsigned int)vectors;* N) _9 B" v8 d' [
    ICR = 0xFFF0;  
6 N4 a# Q$ X" {- [    IER |= 0x12;  
% n2 ]' Z3 e6 q+ b+ C' S/ u    CSR |= 0x01;  
9 p0 z" @+ d. b/ {; C7 J
9 a. r9 q3 W; H, D: a
5 ?- _; {9 l# h5 N: B7 Q: x
) g. @3 m$ P+ u6 p+ x还有就是两个输入输出函数:7 f; Z7 y& L/ h, }( R6 P
void output_sample(Int32 out_data)
) l. E6 @/ R% y9 N& d( j% C* c{  E( O) z; C2 |5 _, E/ o+ _
  AIC31_data.uint = out_data;  5 P: T& f# y$ ^% q! g/ J4 Y
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
8 q8 ?  L9 f6 J6 M' H}
' a8 K1 b) ~! v0 [; D
2 z9 x% _/ p0 c) A' {: OInt32 input_sample(void)5 g* Y: G3 a2 j' E) w' _$ p( R
{  
' M; O6 m' e9 b( k% E+ Y  AIC31_data.uint = MCASP1_RBUF0_32BIT;& ^$ T" Z; C$ |$ A3 w0 H. s: `
  return (AIC31_data.uint);; d  N1 C  h( P' Q) K+ D6 [4 y
}) _- L2 c5 a* M# q# w/ _
' `1 @- J* i& Y" m3 G& `3 f
分享到:  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-9 05:16 , Processed in 0.040439 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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