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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:; ]% R8 N7 H; V  H# g7 v) K) E; n
main文件:/ }3 \( D' d# [3 t9 f' a6 o" V. L, S
interrupt void interrupt4(void)  
- |0 f& y, a' Q; m) C4 W, I{
( \5 }8 i1 A% J+ K9 N! _& ?  Uint32 sample;) j( G5 q  t9 E6 y" _
) N# g/ `" ^' ]5 g$ F% e
  sample = input_sample(); // read L + R samples from ADC$ |8 q3 l* W8 y4 E+ N( x' c
  output_sample(sample);   // write L + R samples to DAC
! s3 F; ]9 H* c  return;
, {9 S) q% }2 q& h}* I. z' T- S% y  Q( \

& Z/ q4 B0 }) L4 ?% uint main( void )4 s9 L7 V' `: v7 Q0 K
{
4 Q; p! g9 @' _3 X# D, u8 D! O8 C7 e" E! _) @
    /* Initialize BSL */
1 S' |6 v3 A0 Z4 i6 [& g    EVMC6747_init( );
; F, v! n- S; Z        /* Call evmc6747_intr function */8 y; w( V. ~0 q2 n' Z, \2 o8 _
    aic3106_init( );! g6 u- t. K4 r. g
        while(1);
+ ^) _' i% |" s' C8 n  A}
0 A. K9 g% T6 e# N1 t+ R4 ~: W8 S/ Y9 q% N. C# Z
4 r, n1 X4 R1 R3 ]4 S
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题) K, j& k0 z! n% @& B
/* Initialize MCASP1 */3 @0 n$ c, E# e" y+ f% P, m6 Z& i
    mcasp = &MCASP_MODULE_1;' F5 o$ c7 Y/ r$ G
    mcasp->regs->GBLCTL  = 0;       // Reset2 e6 s0 d- E! O/ M& `0 M7 X
    mcasp->regs->RGBLCTL = 0;       // Reset RX
- n- T7 w2 _- a! w% z& z2 m    mcasp->regs->XGBLCTL = 0;       // Reset TX
$ c  P( ~' _, c7 O% `8 I! u8 P1 H    mcasp->regs->PWRDEMU = 1;       // Free-running! Y1 ~* i9 [; C# Y" e; c
   // configure McASP0 receive registers
$ S6 }) ?4 x8 B3 T    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used5 C; @0 `9 t) \4 v
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! n( e5 Z' q/ ~9 g    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
( D; r; [3 T3 l/ f- ^0 k# b    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
2 c9 k6 X: z* K; r+ t' @# E& i+ g    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)9 A. U. A" l- U; @
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
# n2 l% q* Y0 M: d$ x: ]% S! d    mcasp->regs->RINTCTL    = 0x00000000; // Not used
0 q  V3 k5 A( ^+ q& A, a3 C- q    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 X4 d. t) e5 x' n! P
& c. Y& ~/ h6 r/ T
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
3 v8 G& N; l1 r& a( ]& Z    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. V8 ]8 W" |4 P) G: ?/ p    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
, o# A/ ^% m7 x    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
3 |8 N, P2 R8 U5 J  R6 ?# e    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK( m# v# m3 n9 H, M( W4 z
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
$ d) l. C; s8 h. j9 F    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit9 s4 s, i9 h1 o1 S* T: p
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2564 [- C1 W" ^* |/ m) l
! M8 V) Q: ]7 x9 y; G# m
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN' h5 c: ?3 X1 t. r$ R/ ?. R
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT& [9 M" Q4 r" N. Z3 h
    mcasp->regs->PFUNC      = 0;          // All MCASPs4 z2 J5 |! T/ H+ }( x
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
3 [" i% \- J5 r
' _, q) E: ~7 G1 U: k    mcasp->regs->DITCTL     = 0x00000000; // Not used
' s. G1 p; ^. V7 M, {+ |    mcasp->regs->DLBCTL     = 0x00000000; // Not used1 y& J. @! M: t$ E
    mcasp->regs->AMUTE      = 0x00000000; // Not used
6 h: E. F+ Q- c3 y
7 `) O4 M3 \5 k/ Y' w4 c: `/* Starting sections of the McASP*/
* i' i# l5 u0 d7 B    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; $ H  ^+ a0 U+ g* E
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  4 g- E  h6 y$ u% E
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
7 @8 V2 P( q5 g, e+ x7 n    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );4 ?8 Q9 V, ]" N4 J  q

% ]! z2 V2 [9 W0 V- P; g  ~4 ?1 ~    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
/ b) \4 g  o5 h. L2 p% b. X    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );, ?2 l7 n) ]0 ?. x7 e! _$ N  F9 }
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; . _9 o# _  F' Z; V% G
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );0 V+ e& X' ]8 J  m% d% H6 \

4 h9 y( r# r/ `* ~& N' e  {    mcasp->regs->XSTAT = 0x0000ffff;
$ ?: Y. q5 ]: l8 g5 O    mcasp->regs->RSTAT = 0x0000ffff; : \2 T$ c) A; ?- T; Q" A
8 B: R$ \% l- Y% @& K, Y8 G! c& r5 F/ N
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
$ j! v4 `' H. A5 L: }    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );* A' J. g; W, ?
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
% u$ e2 |5 N5 X' m2 Z3 j7 o    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
/ H. M8 L+ {# m0 S
& T) T* k3 e0 g6 @! c4 d# b! j, h    /* Write a 0, so that no underrun occurs after releasing the state machine */& l- i; [7 }( S# R
    mcasp->regs->XBUF5 = 0;
  V7 L. k% M9 l  C9 j1 E    mcasp->regs->RBUF0 = 0;' m0 |7 v8 f7 Z* q# V9 s
. G! n8 S' o" z5 N- A. I3 w( W# D( ?
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ( A+ O9 U# Y  y: P. i$ s
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
) l8 e7 w: \- H2 G    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 3 B  L+ f0 p) @, q  Y8 Q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
- s9 @. n" p0 f  W, S5 W- z1 y* |1 a4 b5 F- [4 @+ K
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
: ]6 ~  H6 S  Y5 f6 `2 w  m; x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );$ K7 R8 d" J" b# R$ C
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
' b5 x* Q. g- [; H# V    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
/ w( `) T, m- H: i. u. V" d
+ i- W- O8 z( Z- x    CSR = 0x0000;" T9 o7 U! u/ ]
    INTC_INTMUX1 = 0x3d;$ O: T) `" p$ I( |
    ISTP = (unsigned int)vectors;
& L, J0 d' D" n& F    ICR = 0xFFF0;  ( l# }- L' t  a7 A7 Z4 c& {
    IER |= 0x12;  # N  I& Q2 l3 _" [
    CSR |= 0x01;  ! u% d: @( u. C7 q. j" u

% ?0 N  c! l% F5 C" |1 _/ ]7 i( z3 `( r# \$ s4 N! o; h9 s! P  H3 \

5 }) F4 b1 i3 V( C4 j5 x1 G2 k还有就是两个输入输出函数:
* d! c& M* p8 z! F1 pvoid output_sample(Int32 out_data)+ g8 [" h) e' @& `2 R
{
7 v7 `  }$ H- k; @) J  AIC31_data.uint = out_data;  
9 X' L) Q  E* e4 t. @  MCASP1_XBUF5_32BIT = AIC31_data.uint;; D. E+ y, x/ V  Y4 A$ Z
}7 q& b! n7 _7 r1 X8 j
4 h4 A9 {) A, u( o
Int32 input_sample(void)* r. X! W0 \# z! V  T" i+ ^. b3 |' s
{  ( e+ g# D0 D5 o; \) H6 Y
  AIC31_data.uint = MCASP1_RBUF0_32BIT;1 j: y3 l3 \2 k5 f, ^2 |  E- o
  return (AIC31_data.uint);: B  s6 G! A9 W+ A3 f2 b
}
3 p( \! A0 n+ w
* [- |, T1 c7 ^, A4 |# w
分享到:  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-4 16:30 , Processed in 0.040952 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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