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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:; e& e# h% Z" M4 d( {
main文件:3 Q6 l9 k& V+ c+ @4 q
interrupt void interrupt4(void)  : J) C, i7 q, P! Q) C& A8 ?
{2 _0 Q/ U3 f4 ?* t; F
  Uint32 sample;, U8 _" T" _' B5 S
# ^. Z) D  T' }: l2 O* C/ t3 I
  sample = input_sample(); // read L + R samples from ADC  ?+ c7 V5 q. N
  output_sample(sample);   // write L + R samples to DAC ( u2 ~1 D$ R0 x! t
  return;
7 b+ F+ n' s( {}
. h$ K) \3 O* F( X5 V2 s% ^9 I/ U8 f: @! c. n3 ]1 i
int main( void )
% K  S+ R; S, J( ~% r: y, Q2 E{
5 c4 I' W# v7 K* ?) F8 a7 F: y
  U- V3 c1 D% S7 C7 ~    /* Initialize BSL */! }2 T4 J5 |3 A  h) ]& k
    EVMC6747_init( );
2 f3 x8 C: c  R6 `        /* Call evmc6747_intr function */
( A4 @9 F0 H+ Q% e1 W1 Z  t    aic3106_init( );
2 O- r8 K8 S' v  i" O& W% t5 a# t        while(1);
: D. Q7 W1 i- P* l7 E+ H8 L}
% _1 v: H. }2 w: r0 @/ g4 E6 f+ D- S, T
3 J& {0 o* u' O0 U4 M  L/ P
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
& h* L* l- e& x3 r/* Initialize MCASP1 */
* _: t6 ?8 w. W* Y    mcasp = &MCASP_MODULE_1;
, @, X0 c( i: H% _: R8 {    mcasp->regs->GBLCTL  = 0;       // Reset
" M, y$ z; o/ H& U: L" ~    mcasp->regs->RGBLCTL = 0;       // Reset RX; W9 d9 c, q: a; b% @# b
    mcasp->regs->XGBLCTL = 0;       // Reset TX
: K8 r" y$ B& {- |5 ]    mcasp->regs->PWRDEMU = 1;       // Free-running2 j# d% `' j8 Z. J
   // configure McASP0 receive registers, W$ P6 S9 Q5 M4 u# @% n4 n6 r5 C  I
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used$ L! }# G# T( `  E0 ?# o2 d" g
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: R- [6 k5 O; j# j3 [7 p) C! i
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
* Z7 [* Q% V2 _% s7 S' P- K, A    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
8 W- n1 r3 s' ^. H0 z    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
/ C# W; i+ j+ m4 @) X. L9 [    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1" Q( g  y$ F9 K& u- K
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
+ \( [( f! I. i+ Y, U3 G    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& F) q/ o" m+ M" M) L7 w5 }  g
( d/ Q. h$ G- z$ N
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
0 y1 T* z, S4 Y5 C( O. u1 q    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus+ X' j6 q! |9 Y6 X1 b7 _# h6 g
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
! Y  O; Q$ y; ^; t% X; a' ~    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
- T) w  z3 E0 c0 @1 Z; C6 A! T9 ^    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
% y* L# W( t' _0 f) r/ C5 A: k    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
' l: G* N: N7 ^5 o8 E    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit; s; E: s" o4 K, C2 B% X. O
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256  i# Y* s  z% m
2 H, N6 H( G9 P' o& R/ b  s
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN& Z8 k( M/ @8 Y5 x
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT; G/ Q0 \' @4 {
    mcasp->regs->PFUNC      = 0;          // All MCASPs
5 H9 u+ S4 E# s, d7 m    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
6 [% }# l. `: i0 V6 I  E
! ^/ j$ z# O/ f5 s, F+ c* S    mcasp->regs->DITCTL     = 0x00000000; // Not used
! f" ^2 ?7 |* k7 T& y% Y1 \    mcasp->regs->DLBCTL     = 0x00000000; // Not used. x/ r) m: N& W$ h( f, U7 V
    mcasp->regs->AMUTE      = 0x00000000; // Not used
$ N' W; h/ G0 Q1 f$ S0 B: x7 c% q5 x' O/ c4 S7 i$ n- |2 L; Y7 K
/* Starting sections of the McASP*/
4 J) Q+ r' a; v2 K3 a) I( T+ b+ d    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
6 A2 _" ~. c9 |6 R    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  8 L) J( G+ y% L# V; t& Q7 X
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ; n/ P$ v# }$ A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );; ^# o0 c$ W7 \

  R+ d9 `: M; Q8 r4 R3 }1 H0 r    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
0 C$ A# b. d$ l* @$ \, \    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
$ z: \) t& a6 z( v7 X$ M    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;   k9 j2 S/ Q: E/ E4 P# C  F9 }
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );0 d3 W" y( {  h5 a: ~) \- [' j
# s, z3 t* d4 u' f! ]# O
    mcasp->regs->XSTAT = 0x0000ffff;
; _; D; P  l! z1 W    mcasp->regs->RSTAT = 0x0000ffff;
; S+ K4 l/ @7 `" B7 X! P) \! t- x7 P5 ], P) k, w1 a  F
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;  t" m4 F1 G7 W! {+ l1 ?
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
  K  i/ H5 w3 _6 r& D    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 8 u- q; P- Z' k  |# u& s  F
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );4 [% j( M& o! m: t

, r1 U5 |+ R/ e    /* Write a 0, so that no underrun occurs after releasing the state machine */
- ^% w7 m7 H4 w  |    mcasp->regs->XBUF5 = 0;6 L8 M  I# {, D# K/ G" |9 K# W
    mcasp->regs->RBUF0 = 0;. g- O4 l) Z' F& _

8 s! K9 r$ V% M/ P    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
. i+ M" B' T' n7 y: l, C, ]& N    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );% O& H& I" F% z- O! @! l
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 4 f: V* ^; t4 `0 S
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );3 H- ?" E6 m- j0 t

* Z4 x# b3 v3 O1 N    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; / \" _; m7 A' L1 j2 }& ~
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
! e9 g0 Q( _) m3 `" C    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; & {  p2 m" r' i. Z% g7 W2 z* U* z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
+ X  i( d) {9 m7 i
* Z! s2 i1 Z( P9 b    CSR = 0x0000;6 T- P9 U, T+ E3 A
    INTC_INTMUX1 = 0x3d;
1 N  N8 w" j4 ~+ |- A) {+ N    ISTP = (unsigned int)vectors;- h9 N. x, {  a3 r- f9 `
    ICR = 0xFFF0;  
) }0 \) T- a. \    IER |= 0x12;  
$ n: l$ j( ?) k4 |+ R. A0 L    CSR |= 0x01;  
% k. j2 V# U- u& X
# A4 H$ C. w  f# V9 z/ d* D' b7 M2 M- F8 S) k
! D! ]" _0 o  D/ I
还有就是两个输入输出函数:2 g7 @! a$ C7 U3 [9 R) K
void output_sample(Int32 out_data)4 G! B; \" \! [0 t7 O
{
% m2 @2 Z; L8 S# A6 c  t: e7 ~% `  AIC31_data.uint = out_data;  # ]. _+ r3 M/ P. i# \8 d+ s
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
' t) A) x$ R' D! ?9 n/ ?}
; l* M4 O/ u, ]2 U% H: _: |3 W3 `; a, ^1 z
Int32 input_sample(void)
, n$ t, ^# p! v* r9 f- u{  
! [. @3 X% [' N. |' e2 m6 j  AIC31_data.uint = MCASP1_RBUF0_32BIT;
/ g) {; `0 H9 U( y( D# u; U  ^  return (AIC31_data.uint);9 ^( L( Z6 ~2 r% \4 Q3 V! V& I/ i
}' C) Y% G6 p; F; a' x8 L$ P
4 U4 f! }% _0 Y$ A2 ^7 @8 G4 U
分享到:  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-16 19:12 , Processed in 0.039391 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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