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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:  r# u0 h2 T! C8 h; Z" o. }
main文件:0 O/ G  V) O/ S
interrupt void interrupt4(void)  
! B5 F; f9 G- L- K/ W5 U1 w{. Y2 T' W: |; E: s' W$ h. P4 W9 _
  Uint32 sample;9 u. n# C- O9 k: l& u* |8 U
$ R4 o- m% c8 D1 J  T4 y
  sample = input_sample(); // read L + R samples from ADC5 S1 }( A( f3 p' b) y' C- y/ f
  output_sample(sample);   // write L + R samples to DAC " x: k1 a. j: w$ e+ ~; \
  return;6 i# \- s& ]: b4 }$ H9 o* d6 m
}
; J2 U: G( s* \+ Q. ]1 q' S8 V5 s7 j0 I( z8 Q
int main( void ); }2 l2 p9 ^" O3 x
{
/ W2 f& E& n2 k
, S  R6 m3 _' Z8 h  Y    /* Initialize BSL *// v# k$ K& J# r! ~, {: K6 Z
    EVMC6747_init( );! }$ }8 q9 n, J7 Z, ~' S* y3 y
        /* Call evmc6747_intr function */
) D8 w* ^0 J% P    aic3106_init( );$ m' S1 A) Y; {+ u7 t
        while(1);3 I6 M& @! ^7 i3 B
}
8 `: Z; ?  T- x& K2 \! X5 y+ m! _& U  {3 ]5 E( F

7 R4 U; }" Y% ?0 u0 B; X9 Laic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题5 X7 A( [# _/ H: M0 c8 K  ^: m; f
/* Initialize MCASP1 */, ?; h' n- R. ?5 G- ]
    mcasp = &MCASP_MODULE_1;
' {" |! G5 R  i& v+ j0 Y1 S# u    mcasp->regs->GBLCTL  = 0;       // Reset
3 R& x% X& a0 B    mcasp->regs->RGBLCTL = 0;       // Reset RX
, W  _& u" u4 E# q7 P  E- N. y    mcasp->regs->XGBLCTL = 0;       // Reset TX) G' u' @- t8 \6 v  n- A; ?2 H" ]8 N
    mcasp->regs->PWRDEMU = 1;       // Free-running: Q/ M" ?" l* b4 J' w9 Y# M& S
   // configure McASP0 receive registers. }0 I# ?9 [) I" ^4 j8 W8 h$ L2 D4 P
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used% a$ B5 C+ I* z
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
  ?, `) O' \+ n8 X$ {2 p8 _    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
: g: y' B- B) ^/ u6 Z    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
; B& B' L5 i2 R- S0 l' @4 j    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side); U  v1 l- F' p6 ?0 [
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1, w3 p% U5 t5 S: |# K- p" F
    mcasp->regs->RINTCTL    = 0x00000000; // Not used% C) w4 d! e3 ?& ?% j: Z6 q
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 p( {4 S# H8 c
7 M+ k& C/ ~  `, M! _  o    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
* k% D% W6 m7 w% m9 R* h    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! ]4 X  F; c$ w1 k: p7 x2 W    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word( @$ w0 V2 y" l4 u
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-167 `/ m. R  }6 L: e( I: B0 L  M
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
' ?, ]4 Q1 P! a' G) z1 v    mcasp->regs->XTDM       = 0x00000003; // Slots 0,10 n  c7 d: \" w) [
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
( i, B* @- |7 }( X    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 b* Z* ?( t; p  E/ T
" H$ r1 x: e* {( O" L6 E* ]& Y" G
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN7 P& ^  [6 O+ L
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT$ U% ?0 A' }  T+ U$ g( a7 Q
    mcasp->regs->PFUNC      = 0;          // All MCASPs- X* l; T9 P' o$ z
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1* d; Z  S, A( s" }; d
' [% A' j) |' }; X' X
    mcasp->regs->DITCTL     = 0x00000000; // Not used
3 T3 \2 g1 o1 F; X" I# J" q    mcasp->regs->DLBCTL     = 0x00000000; // Not used0 s& q% }8 @4 ]) G& [% f/ Y9 r
    mcasp->regs->AMUTE      = 0x00000000; // Not used. i1 |2 W8 `, b0 ~( T

$ Q- v7 H! y4 @7 Q: u, K/* Starting sections of the McASP*/7 {/ |. l7 e& P
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; - q$ n( B/ ?& Y/ K; O% \& y1 ^
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ; @7 N- M' ~3 i% z8 y
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; * u1 O& h) K$ w; W8 M* z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
3 }5 @$ g' R' I% J7 p  ]
+ c/ X2 }/ j- F% e3 m/ n    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
! }/ E- N8 K( \% w# r6 S' O! o    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
& Z; Q! ~  c! F9 C' B    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
$ Q4 h$ F: A: @8 i& w5 W5 ]    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );9 ]4 Z! L; M! d9 W6 p! e, |

4 |. q" ~' u7 [* b/ X$ |! T    mcasp->regs->XSTAT = 0x0000ffff; 5 s! E/ P4 _) U# l1 Q0 W, m" M7 h9 C
    mcasp->regs->RSTAT = 0x0000ffff;
! U5 V- Q0 a  u4 }1 P: l
$ b% w2 A$ A6 ~' h9 ~# p    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;; x8 g5 Z( l% h3 y0 Z0 Z# v3 k
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );7 l. Z; T6 e2 f
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 9 S! O. S* l+ @, }
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );4 X7 J0 G4 j# B, ~, K
+ ]  D/ Q) ]* Y" f$ v
    /* Write a 0, so that no underrun occurs after releasing the state machine */" n4 l" O% w9 |
    mcasp->regs->XBUF5 = 0;
! ]* v" Y9 f. U6 B! I  g& F    mcasp->regs->RBUF0 = 0;: t3 ]7 z5 w1 T8 t  k% c

6 l0 `8 C1 w/ o7 ]! X3 W    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
% ?& `$ x3 [, S+ b8 V( H% y6 m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
& t& O# g4 l7 t! N    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 4 i& |6 y* l9 ^
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
" b8 _& w0 N# _3 p& D/ S' d: j# _( D% X* J: Q
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 9 Y* D$ d8 ]& Z% D5 @3 Y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );; F: p  t2 `; [1 s' w
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; # [1 u5 P; a* _# ]% V
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );1 o# _: ?8 o! D
- X# `( t+ z0 t5 b/ F
    CSR = 0x0000;
6 T4 a1 i9 `$ |4 s5 f    INTC_INTMUX1 = 0x3d;; o) Q. D2 x( L2 O( v% V& |
    ISTP = (unsigned int)vectors;+ r6 E& \3 z8 f4 G( S9 T9 ^) F
    ICR = 0xFFF0;  6 q! _) P5 w( x
    IER |= 0x12;  8 x% V; t/ _' F( t
    CSR |= 0x01;  3 J) H& G( D: u+ ^4 K' G

9 }5 f4 K: O0 N* \  c+ [3 E7 R  b! h4 k' G2 _
: g1 T8 u- ^# Y9 d4 {" j0 `  @8 P
还有就是两个输入输出函数:2 N- L+ n* }) ]' z
void output_sample(Int32 out_data)7 g2 a. o, B8 g7 j
{
, e& `! Y; _. {9 n3 p  AIC31_data.uint = out_data;  
0 X+ l7 A/ e4 ~8 N: p  MCASP1_XBUF5_32BIT = AIC31_data.uint;
+ E0 E# k$ i, y}
+ {5 i# c; G3 `7 {1 d1 P' D) G0 |2 V5 o
Int32 input_sample(void)
! ^! n) C* D; ~; ^& q* O9 K$ ~{  . M" P7 B+ e6 y2 o
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
. `+ m& y( t+ T6 n6 r1 p1 G' L1 @  return (AIC31_data.uint);
9 Y9 \) s3 h  M$ U* i' U# ^}1 s- }9 i. ?# d; e3 [
9 M- s1 f# S/ f. Y# 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-4-2 16:46 , Processed in 0.068527 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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