C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
4 {) u- G9 A% R# [main文件:4 |5 a% w6 n( f9 R3 I
interrupt void interrupt4(void)  
2 y$ v  j% m1 E$ C( Y- @" W{% }. s9 c) U( E% x
  Uint32 sample;  F) i( Q1 r  q( B% a% V7 S! D
' W! U1 _0 x4 h0 o4 Y
  sample = input_sample(); // read L + R samples from ADC
' g7 D5 n6 K- I. A  output_sample(sample);   // write L + R samples to DAC 6 R- p4 ~) T* s  h" ^$ s8 X3 F) L
  return;) h4 @. ]) h. N0 d! S$ O
}
* [9 o  Z7 @+ }, D5 m, ?% D0 l8 }2 l( R( ]9 p0 s$ l* p
int main( void )6 P$ B% i5 P3 a& w- v& d: W
{
+ B* r; e. }  V) \
7 g$ g% V3 k# {% A# X    /* Initialize BSL */
4 K* F! k5 n" V1 f- r" Y* g! F5 a% i& C    EVMC6747_init( );/ D" J! H* D8 J) u; v
        /* Call evmc6747_intr function */
! ]" F3 Y# }3 [% U8 J    aic3106_init( );7 S7 O( x+ I" |6 @
        while(1);
* m. j9 b# q: T}$ E1 w" q% B/ w! l

. `- F9 _, j8 m" w% Q" D2 O! M
0 `- c1 `" H: m* Oaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
# T) g/ N& x0 D/* Initialize MCASP1 */' ]7 D6 T2 h" F
    mcasp = &MCASP_MODULE_1;
9 D( z% x) e# G1 U    mcasp->regs->GBLCTL  = 0;       // Reset
( {6 W% J7 u' g2 H8 V    mcasp->regs->RGBLCTL = 0;       // Reset RX
& P2 k9 I% e! p: F    mcasp->regs->XGBLCTL = 0;       // Reset TX
$ W8 ?  f6 K  ^2 m! i3 ]+ Q. Y    mcasp->regs->PWRDEMU = 1;       // Free-running
2 t( E. M. P# \. R. i/ ^! S4 i/ l- v   // configure McASP0 receive registers4 p, E" _3 j5 S: r
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used# z+ g2 n. z% g, g/ T+ j
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 b% u7 ~0 X1 X* r9 {
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
* V$ t% Z4 ]1 @4 |+ @( H, I    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
8 e' I' u  |% Z8 Y& [7 W; ?/ D) W    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)1 P& [; T* P% q3 i) R. A4 V, Q
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,16 P3 E' p% G4 C
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
2 L' y7 V# L6 D5 \! O0 h    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 ]" ~& h& U4 a/ `; g" c
# h) j. m' ]7 W, l6 n    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used% n, |9 F; W$ P, u# o% o* r. J
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus% v7 W4 @0 `. y5 g* R9 t5 Z. q
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
5 k% d: {" M2 g$ W) X/ ?    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
7 A7 b& r( `- a9 H    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
  }3 z5 R+ F5 f4 m0 o6 z    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
* e! @# x4 A- P$ A" C    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit8 f6 \+ b* [8 S* X
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; }8 z! y+ g# T- l
9 ?; s. x+ n4 {( p& [, a; Y: A    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN  H! F  W8 p* ~8 e! _
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
/ K3 j- y! ^, M2 ]+ @# i    mcasp->regs->PFUNC      = 0;          // All MCASPs0 E! ]5 n# d7 [
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1& _. z* E( u. ^; }. R
0 z& E# ?5 z! z& n$ H
    mcasp->regs->DITCTL     = 0x00000000; // Not used
* e8 L( A* w8 ~# ~9 i4 {  L8 p7 g    mcasp->regs->DLBCTL     = 0x00000000; // Not used
8 k: y. x+ M9 T# ~! r( b    mcasp->regs->AMUTE      = 0x00000000; // Not used' k# c5 [' `# C9 {

( U1 z' p- O1 _" @% Q8 F; `/* Starting sections of the McASP*/) R- n4 \. S' K8 y( `+ \
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; & P8 U( `6 E2 a1 S
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  & _# R2 r0 {4 j5 }3 i! z
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 5 J. [" I# {! n( n
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );% w- n! \/ U, T$ l* ]3 q. y
9 `1 A+ ^$ X& ]% h& ^/ f
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
- ~2 W& j: ?5 `# z( k    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
2 H; b  w' ^5 E9 C    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ! u' e& e& D+ h8 Y: P; b( ~
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );" c4 Y, Y7 N5 y' E1 }
- Q5 E. B& A% s. ?: v
    mcasp->regs->XSTAT = 0x0000ffff; $ `; J: {- W; p! M7 @1 v
    mcasp->regs->RSTAT = 0x0000ffff; ! N7 z( d& `& G

1 e, U8 s+ m5 b0 M, Z    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;1 {  v( @9 A! x# A
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
3 d% L% D4 W) A4 N: Z; g    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 2 \7 w0 ^: B( }5 e
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
1 d: X& l7 `/ m
* z5 Q1 A9 l" t+ M/ Y$ z4 A' E    /* Write a 0, so that no underrun occurs after releasing the state machine */# r; ^" n; D6 B. f9 G$ w
    mcasp->regs->XBUF5 = 0;
* \5 Q+ q" X* ~) N/ g    mcasp->regs->RBUF0 = 0;
# n6 P" R. q2 q5 P- w7 ]# T8 p( v$ a4 W1 A/ W& m2 k$ Q
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ( {9 H6 T' u- {+ P
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );% {' _# H$ B1 D& Q; M/ M6 x7 J
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 7 \9 m$ R( I* O$ b8 t: v
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
  ^. p* A  n! U. G
) ~% z8 r& `$ H. N, a, f( \; }    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
2 t0 y6 i/ h0 I    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
" C' Z; {8 x4 W- ~0 X8 s5 N( k8 U; y4 J    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
" {; S4 K' F) d4 y1 R  @6 v    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );- S5 e$ p% f7 d/ d7 i5 L
, r; r. q) D" ~1 e& \0 g# h% [
    CSR = 0x0000;
4 i  Q; p  d& j/ I" ~    INTC_INTMUX1 = 0x3d;! ?) k  m/ K  N4 l& J
    ISTP = (unsigned int)vectors;
) Q. V, @4 ]$ s2 k- |+ t    ICR = 0xFFF0;  ! n1 p. r8 K6 Q. B7 l9 L" s
    IER |= 0x12;  5 h* g. h( ?0 W9 u% H
    CSR |= 0x01;  1 @5 ^, m% e* Z+ ~" |, X
  q. n/ j$ G% y( R1 }0 ?+ J
2 Z- T' I; D6 W3 [  {8 N2 \7 C7 [
+ J+ x% o( ^; L& C
还有就是两个输入输出函数:: W9 m# W1 w; C8 t8 S
void output_sample(Int32 out_data)% W1 T8 n! U& u8 N
{5 N4 n- q' z- g: D3 S4 B
  AIC31_data.uint = out_data;  
4 Q) g2 b' M* a, m  MCASP1_XBUF5_32BIT = AIC31_data.uint;
; X2 u9 S: ~# U2 s# E}& G- D# [9 F; W

4 i  j: N" O6 a5 oInt32 input_sample(void)( R9 D' q$ _  X7 n) t$ [
{  
5 A. n. T1 i4 r6 I  AIC31_data.uint = MCASP1_RBUF0_32BIT;% o  E4 n% ?' _6 R* n5 Y) |
  return (AIC31_data.uint);
% @9 ^( S$ @3 g  V) K8 T- H2 a) J}  {9 ~8 L$ `, r! S! o" o

, d3 Y/ Z3 U; l5 o0 Q3 \
分享到:  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, 2025-11-16 23:54 , Processed in 0.042154 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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