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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:' x) _. i0 Z* H8 O" {5 g. y
main文件:
* O; j4 |! J8 l+ x+ Q# u- M7 H& w7 minterrupt void interrupt4(void)  7 z% J1 `- f$ e/ f8 ]+ G3 o7 q
{
- A8 P" f. E; u3 J* h% `8 F  Uint32 sample;
& a( \1 B/ u2 G* x1 U8 n
0 ~6 Y- r0 z( V4 [5 H4 C  sample = input_sample(); // read L + R samples from ADC* }( a- V/ y: H8 p& A
  output_sample(sample);   // write L + R samples to DAC
9 L9 h* ^# I% @, J  return;) a# Y, `: F' |! m2 O
}- \/ N: V% a& p

9 u9 I& o/ |) W6 q8 Uint main( void )
! y, X) Z/ a$ l' m8 W{
3 ]) ~8 a6 u/ G, Q' Q* n9 H; _0 t0 ]$ ^( ?
    /* Initialize BSL */
9 v% T( Z7 `9 p5 O: z, y( i    EVMC6747_init( );
  i# f, F6 `3 `* o9 R! C# D6 F        /* Call evmc6747_intr function */$ v7 k: s6 y, o
    aic3106_init( );
4 P& t3 Y  W# q% a4 F  h        while(1);! a; t* w5 D  m7 T4 \
}
/ O! T3 P3 D9 S. x7 l  ~' J- Q
/ t5 P- H. |" q. E9 y: x( j& s$ y/ `& T6 A3 ~+ b
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
1 T  w# r- _, j4 q( J/* Initialize MCASP1 */' g4 o1 C0 F6 I. h( |
    mcasp = &MCASP_MODULE_1;; @1 X" Z2 Q5 ]. F  ?9 G. G* m
    mcasp->regs->GBLCTL  = 0;       // Reset+ B0 ^9 l, X. @5 |: I( c3 ?3 U
    mcasp->regs->RGBLCTL = 0;       // Reset RX0 }, |: Z) z" F! D' ~
    mcasp->regs->XGBLCTL = 0;       // Reset TX
1 q/ W) M5 i- N* r( k4 n) T+ f    mcasp->regs->PWRDEMU = 1;       // Free-running( X+ _) A7 J! y
   // configure McASP0 receive registers6 z3 r0 W1 C3 |
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used! `9 \! H4 [; P1 w- z8 x6 L! @- m# V
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
/ q7 R" z" ^. B4 j/ a" Q' @    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word( ~) ~3 R+ y. f% f) K0 a# I1 y
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side); @. z* A( Q! h
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)8 u) s/ _+ G7 ^% A
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
$ B4 P+ e" K9 d) B    mcasp->regs->RINTCTL    = 0x00000000; // Not used% ^; K% U  F2 H! C' _& H
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 ~+ i0 O3 t$ K& o' l( ~

. Z, w: \  z9 T7 q/ k    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
* \+ R3 U8 V9 s4 v9 v8 x# \    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 {! s! Z) b( u+ c: o3 Y. t
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
( ?6 k2 w" i4 m" ]- i$ C    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16# q- n  M; u3 Q
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
: K% n; X! p9 p6 C6 @    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1/ }' W# ?) k" a) C
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
- R9 |2 ]% U  B9 M7 s+ E1 b4 ^  s    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256+ U! ?% E7 G, x& K/ x
3 \* d% J$ r9 L9 g2 @9 c
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
- M' A7 \7 C8 @# M    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
0 a4 `; U- L0 w/ i, O" i0 D8 |9 f- ^    mcasp->regs->PFUNC      = 0;          // All MCASPs* T6 `; o3 g1 a/ Z
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX10 k% ^0 E6 A2 A) B. i" H6 V

6 t& b) X5 ~) a2 m    mcasp->regs->DITCTL     = 0x00000000; // Not used6 i* I4 G) Y1 m) w! X% J* V6 I
    mcasp->regs->DLBCTL     = 0x00000000; // Not used- F  \7 [' }, i& Z/ \1 r
    mcasp->regs->AMUTE      = 0x00000000; // Not used
$ t, Z% Z& ~  _& k6 Y
- A& m# J! |/ p- g# @& T" F, Q) @% Y/* Starting sections of the McASP*/
5 W. ^; q  H3 X! u    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; & Z2 B& c3 a$ N* a$ n! \' D
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
6 _: x- ?0 w* K) l& R- P9 c- B    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
" Y6 T& i  _5 ^5 l! X    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );- \5 e: T; B( ]/ t8 K' J& z
' Q6 [" r- u! C* k/ E2 S! \
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 8 S, t+ S) U# I5 r) H, b
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );9 C* [1 {: l# e) X% k1 H# V, Y! i
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; , }& p$ e  F, W  v& W
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );2 X* E4 X' k7 R5 q( |

2 w1 S. X* A- o% V6 e  D# q+ W    mcasp->regs->XSTAT = 0x0000ffff;
( q4 S. `' F2 \" z' g8 L1 y9 ?9 J    mcasp->regs->RSTAT = 0x0000ffff; , n: r7 |/ k1 h( r) k) d: O7 `0 M4 V

' K$ L$ i' K$ ^% x+ g. q8 ]7 N    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;" S( e& v9 e: F% {0 {7 S/ {
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
% `# V$ t, ?8 \# o' O    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; , q$ C9 v- R. V
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
! M: s# a! N: U. l
% T. A6 |( A3 u$ ^    /* Write a 0, so that no underrun occurs after releasing the state machine */
3 @% o' h) y7 }" h    mcasp->regs->XBUF5 = 0;2 R) `7 f0 z; ^8 F, G8 X1 q* F
    mcasp->regs->RBUF0 = 0;( n7 H3 X# N  g) j) k; F& L7 `

9 S0 T9 V; B/ V; |! L    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
6 g! W5 n  x5 D" _9 v, @& R    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
% T/ J% X" f2 o# l! }% e' \    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ' X% m* [/ G$ D' H- p# B) s; N. a6 h
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" L) A) q- x, ~+ t" O

7 x' d0 @2 p. N, i' a9 p$ C( T8 [6 R    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
+ K  P2 X4 G% Z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );& ~! v1 q! [- R- ]0 C
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 3 |! k1 j7 d# c8 g) d, [! `- ~  ~
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );( ^! N8 V5 D3 Y7 L) c9 \# l

: G! i$ J7 c/ d7 @. A    CSR = 0x0000;
0 t# Z/ m3 K1 u) |( i* f) l! Z- ^    INTC_INTMUX1 = 0x3d;
" S  F! f* u# R    ISTP = (unsigned int)vectors;
( ^, K9 s$ ?. N7 J/ P    ICR = 0xFFF0;  7 ?1 q: z$ n+ E# Y# c
    IER |= 0x12;  
+ {; e2 ^3 G- u, ^' F. f    CSR |= 0x01;  
  g& H/ [, R7 @# r1 Z
, ]$ }$ _- ]1 Q% p9 i/ f
# V4 |2 y5 n7 {+ L* q8 y4 P6 t- ?4 K; c9 P* S% p; S4 A' |
还有就是两个输入输出函数:' {! s& o9 W4 L; y7 o
void output_sample(Int32 out_data)% u$ o! H3 {. }0 \
{5 p  h* T* X$ E- U' u) V( p" w5 C
  AIC31_data.uint = out_data;  9 T% O3 s& J& G  i4 R$ Y! g& k
  MCASP1_XBUF5_32BIT = AIC31_data.uint;7 ^: G& s! S$ S4 B; |/ r" b& o# o
}) [; _; h- E# c# [( @, q# S$ z

3 U$ K/ X1 t" o1 a5 @6 n  uInt32 input_sample(void)+ Z  D+ u$ \. g0 Q7 s
{  
) n1 p% h# X6 ]. X# y: t  AIC31_data.uint = MCASP1_RBUF0_32BIT;
4 }7 B- I* @. q' n& Z6 c0 T  return (AIC31_data.uint);) {/ w; ~7 u( Q) ^$ ?2 w
}
: c: r: d1 D4 q% J" H1 y1 U
% I' G: j; s: ?# c$ r# E/ Y3 J/ o
分享到:  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-1 16:52 , Processed in 0.041903 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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