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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
) [5 g- ~% V/ A* gmain文件:
( p0 S( \* l; H$ hinterrupt void interrupt4(void)  
' Y0 L3 G% p5 X+ y# C! T4 \{
; F7 f( l, L! N; L" y  Uint32 sample;
" c, a0 |# D% @
; Z0 Z3 y$ g( [9 S& R* I  sample = input_sample(); // read L + R samples from ADC4 F" G. B+ T$ [9 V3 K7 z# C5 h
  output_sample(sample);   // write L + R samples to DAC 0 @4 c  X5 X1 Y$ |5 ?% f# w
  return;
5 n, y! A  }2 Q2 o- v  w/ j}
. T2 m  v6 o" V# B* b, k
* H9 {% Z- G: G' `6 Z. E& Sint main( void )
+ y& T, O; \+ z3 P) Y# p+ g{
- ?; F! p1 x/ ]; u0 n' @! L+ g: h4 V) N, d2 k
    /* Initialize BSL */
) s& i  E3 ], P4 _7 k4 P, h    EVMC6747_init( );
0 E1 F8 v7 b, t9 B" q) d: P        /* Call evmc6747_intr function */- b% ]/ _) h" u- l2 L) F
    aic3106_init( );
8 a7 @) A% P2 N  I* H# Z        while(1);
, j" P7 p. A, W4 L( n}
! ?9 U, g$ G" C: A$ W9 w$ N% X' a$ V" |7 b

, m$ O" Y5 X3 jaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
* u: u7 i& A1 O% {6 Y* K/* Initialize MCASP1 */
* ^* z  t% M: h; \2 S    mcasp = &MCASP_MODULE_1;' W# F# v7 ~6 y- Z0 g
    mcasp->regs->GBLCTL  = 0;       // Reset0 x/ C8 E+ L+ O+ y0 X8 E  w
    mcasp->regs->RGBLCTL = 0;       // Reset RX
' q. z3 S4 @7 ]( h+ F    mcasp->regs->XGBLCTL = 0;       // Reset TX
% {7 Z# P( o. f; [! J# t4 }    mcasp->regs->PWRDEMU = 1;       // Free-running
9 ~+ e" l$ q/ Y7 U1 `& Q7 w) a   // configure McASP0 receive registers
% v' j; E' K& x    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used6 a; ]& X8 D. Y: j) g
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus  C1 t+ `+ _: z) \
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word6 D& u9 ~8 ]! T& X. x
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)7 g' D0 V9 R8 s* T2 f) z$ n( S
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)( l' S$ `5 Y* ~/ S6 L# `/ K
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
7 ?1 o/ K# }  [: g( B    mcasp->regs->RINTCTL    = 0x00000000; // Not used2 {* D. |  V& }1 z  J4 F
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* F: w! B8 u0 C4 R4 c
% j; y; y7 d* `; p
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
$ o! z, Q- s* \$ }! y* f3 G8 g    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 w- J+ {) b+ `7 u3 H" \4 ~3 n8 T
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word, W& a- q4 O! {# }
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
" U9 h* }6 g& T4 @# x% a  w$ j    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
7 I1 I; C* ?: o    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1! h$ _* h% B7 }1 A* G; @" p: @2 W3 y- @5 {
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
0 S  [: O& C4 p% G* w$ ]    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ ~! V& S9 C' d4 f1 l

+ h: t9 s2 R5 V9 P% ]    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
  `4 d+ d. K9 N7 _    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT* D9 F$ |4 M$ R8 k- \' T
    mcasp->regs->PFUNC      = 0;          // All MCASPs2 D. _( Z* _& N! _
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX11 n& r) K: ?6 a" m( c, o

2 ^0 s& G. G$ k/ M: l    mcasp->regs->DITCTL     = 0x00000000; // Not used0 I. X6 [. V( d- j0 Y4 H7 C4 d& e
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
5 Y. @) s4 K  {2 H    mcasp->regs->AMUTE      = 0x00000000; // Not used
4 ?; {% G& M0 V4 n- R1 L6 Q4 F, W
9 D  U) L8 Q# y  n3 N8 h# _/* Starting sections of the McASP*/
- I, C; b& i2 y# a  ?( {* J    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; " m# @& L% b+ I% _
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
7 t2 n2 I+ z; W) v( B: l+ D    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
4 g; [% S* d& S2 Z2 Y) [    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );" V0 V( t* U: j4 Z: V0 J

# S" O' u  a7 ~! S    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
4 H; j, s: ?- n8 a& s* f& z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
9 e# Y7 h& y+ j- i4 C    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
; l% ^4 \) _/ G6 [, X+ i    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
/ Q. D$ g- \. h  Y5 ^0 ~) I( r
! E/ b) m$ F# ^9 z5 H    mcasp->regs->XSTAT = 0x0000ffff; 4 v; T. j5 t6 w3 m8 e& {
    mcasp->regs->RSTAT = 0x0000ffff;
8 k8 q# l9 O5 F) j4 B$ i6 O/ b/ ^* r. i2 U- C2 k
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;, @) u8 ~" s, w9 @2 C
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
0 j! e5 G) @% m7 |+ {' T    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; # `! }9 G# z% O
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
" J. @) E7 l' X: |8 @& f4 v8 g+ K! \1 R- S' x' x" T0 H( q( n
    /* Write a 0, so that no underrun occurs after releasing the state machine */; M6 ^7 U% ]/ J$ z  o6 X  C! Y
    mcasp->regs->XBUF5 = 0;3 Y5 t$ v0 w, _4 D, j/ X+ x
    mcasp->regs->RBUF0 = 0;) H) g2 B3 `, L4 d  h$ P# p& V  M

4 W+ U0 K- _+ Z. |    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;   O2 t. a  f9 c! y4 j$ I# U. _
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
7 z8 L2 E# r" S) N" l    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
2 j4 _5 S$ q- v; k( B7 [    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
5 M* c# j( A" W% y" [3 `' |$ I* K
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 7 Q* Z6 z3 J( I4 S7 h4 w9 a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
" y1 g# H( A; m6 ]$ A* k    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 5 ?! M' e! }- O  f1 p
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );, U% g6 n8 {. q1 V, z

* w0 f4 R! \" i2 E    CSR = 0x0000;! {" B" V! e6 A3 J2 X
    INTC_INTMUX1 = 0x3d;
: ]# e! M. ~3 k! F# J1 W" l  Z    ISTP = (unsigned int)vectors;1 ]" r% M- w* `+ ?% y" g8 m) }% _5 I' L
    ICR = 0xFFF0;  9 t/ f4 L- R; ?& Y" C# Z
    IER |= 0x12;  
% O2 L$ r, O+ |! U" T. Z: `    CSR |= 0x01;  
4 V, g  i" ^+ e" i9 A# _; G# k' ^" Q4 {+ }( F. H

1 G# s: m7 M4 I! a& l4 K: g6 O0 Y3 \) y  t- N& m  o  _5 m4 f* ]9 G
还有就是两个输入输出函数:) h& J: a, w* ?: O. s( g
void output_sample(Int32 out_data)
( j8 {: b( g" S( n% [# H{
9 J, ^. c5 K9 N- `- `' R  W3 l  AIC31_data.uint = out_data;    M( f7 O5 l0 ]  a5 r# t
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
" e" N+ l" Y3 j+ L}
5 ?) X* |, v# g' b, [/ X% x( X6 ]( s, I/ s' z% m0 s
Int32 input_sample(void), v  ~. k, Z9 `; _' }
{  ! w5 ?6 A  X/ c# M
  AIC31_data.uint = MCASP1_RBUF0_32BIT;3 D9 T4 Z1 Z2 A! E; v! B
  return (AIC31_data.uint);
+ V  ^& @6 m! x  L" s6 S5 H}
" _; i0 H( ]4 u% e$ p7 J+ I9 X# b$ X3 d
分享到:  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-25 04:58 , Processed in 0.040097 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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