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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
1 _5 [4 \; O2 X7 [6 ^, S- `! Jmain文件:
( r3 f6 ]- z& @6 C8 f0 e: U& q7 Uinterrupt void interrupt4(void)  " n: N. ]8 i3 q/ k; b
{7 ]  F7 W; {3 w
  Uint32 sample;# t2 H6 E, [6 w. A5 N
7 ^/ T2 x' S! G, _, H1 M3 \8 X7 R
  sample = input_sample(); // read L + R samples from ADC
1 m! Z1 j3 J  b' w  output_sample(sample);   // write L + R samples to DAC " i+ E* P6 p4 u/ t8 z" |" a
  return;
  z: e- i" B$ r3 g4 \- U* ~}' @5 t9 H. A6 f" z
' S5 l2 x# d8 _1 {- P; I) p
int main( void )( g3 |) Z' ?  p! G# d
{
: J8 S+ }2 ~& k
" l1 S# w* f8 ~( ~    /* Initialize BSL */9 v+ o% y- Q- y& Z) [
    EVMC6747_init( );
4 N" i( j/ x( ]5 z" r8 s        /* Call evmc6747_intr function */0 L/ C7 n" Z! s
    aic3106_init( );3 H! x# P" S  w7 i
        while(1);
" z# q7 Q" i- o}5 [, X. ]  }$ E' j- Y

. t( h5 C7 U! `6 @% D$ J( b
$ \3 F( \4 u1 J; w5 D; O/ [2 Z6 maic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
- x: O! ~- V4 g* f  K& j/* Initialize MCASP1 */
8 X4 c8 I7 [9 G3 x' `! f0 E2 A    mcasp = &MCASP_MODULE_1;
, U/ M  u3 E8 I5 o. [    mcasp->regs->GBLCTL  = 0;       // Reset
4 V4 p5 g$ B0 j& N    mcasp->regs->RGBLCTL = 0;       // Reset RX5 J& j0 `5 u' T! U: u( H: \
    mcasp->regs->XGBLCTL = 0;       // Reset TX
, e/ m( a: u2 Y- o" S: W" `    mcasp->regs->PWRDEMU = 1;       // Free-running" W2 ?7 E* V& e# b4 @
   // configure McASP0 receive registers
( r+ X# L: v- o( G    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
/ z* u# r7 \: T% C1 G7 H+ y1 s) G    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) K" |% u% o7 `' J4 p% @
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
! m) t. u  E6 Q/ O    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
/ l7 V+ i+ J# _& Z* S- o" @    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
' K9 ]0 F& ?; I    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
, R* n7 b) H& y4 j. h$ n    mcasp->regs->RINTCTL    = 0x00000000; // Not used
$ |, [% O6 v6 I, ^$ k+ I' h    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
. T' Q4 E* m5 {# e* o3 _4 e) p, w4 A, n; W+ l( g7 X6 G6 d
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used5 }% Z( F, q) ^6 m& z
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
6 J0 }% S1 d* K+ f6 L    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
) Q, r& o# I; o5 G# n& E    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16- [7 c8 E3 v( v8 |
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK  c( x3 h5 f) ?% ^
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1, ^7 m1 c- }0 _+ g
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
/ O; d7 m/ r/ K: `+ K    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256/ r0 b# i& J; p# ?* C& ^! ?

4 G0 \7 X. \+ b- Y    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
, F& s8 Q3 F; U* }! P    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT2 W" s6 |, J' i
    mcasp->regs->PFUNC      = 0;          // All MCASPs
" h& [* ~1 q2 b  u: @    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
. G5 \2 p: A6 L- F  F4 s# @- B5 x
8 W9 x* [$ [( @% [$ ?! C& A    mcasp->regs->DITCTL     = 0x00000000; // Not used
9 n4 o7 O3 \, y0 k    mcasp->regs->DLBCTL     = 0x00000000; // Not used
# U- @6 \1 K1 _/ M4 s    mcasp->regs->AMUTE      = 0x00000000; // Not used
* T" ]. G  @7 }3 N9 f
& T$ w% J: _8 w* t/* Starting sections of the McASP*/& q0 A/ S" A: B! f; y0 @
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
1 p+ f- o( ]4 ^" b' u  L1 O    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  6 X5 [7 ?- @6 Q
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
$ _$ m, Y8 G; R    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
$ X8 E; d4 X, R$ o! ^: `$ B7 N* u5 A; s7 T) b
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
# ?, v2 x# j  ~7 W- M$ @+ F    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );/ f4 E( ~: y0 @6 I6 @% _
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; * n( s+ j8 i& I8 F9 H0 Q" e
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
; A: n7 \  ^- A7 f! n
3 {. a( e% m) ]/ o5 B, e    mcasp->regs->XSTAT = 0x0000ffff;
; f& }% a' e, y" s! @$ Z9 L    mcasp->regs->RSTAT = 0x0000ffff;
! x8 y( `$ E8 ~8 z' r8 }5 K. o% E/ v9 h
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
( I+ ?! c: A+ T% {    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
, e, K& r8 y2 ~" ~    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; % g- D+ W2 w/ A' o
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
8 C% W1 f/ F, R% _
  K& V# W  n! Y) e0 E- _    /* Write a 0, so that no underrun occurs after releasing the state machine */2 I/ d. A" j& u3 c: m" o
    mcasp->regs->XBUF5 = 0;
- {* R3 h0 L/ U    mcasp->regs->RBUF0 = 0;9 J  M+ n7 D' i8 }  |! T; h( K& C
% c4 T/ U7 s+ V% w6 N6 z$ ]
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
0 q+ `' c' y* Y$ q. P: K. D    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );5 W' {. I" g0 c# n( E: [  y2 V/ y
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
! P+ x- |8 K; o) L( @* \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
# ^1 `& _& f0 B6 r. ^# n
2 f  {  Z- [; K    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; & @* z* Z3 Y6 k$ r$ i0 q% Y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
6 I; h% V; o$ W6 j" f    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
3 @5 E9 c3 J8 ?8 R0 R& C( a    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
' G$ e0 Q) G% C* e' j) |
9 V+ X5 x/ F' |6 |" A    CSR = 0x0000;7 g3 O* n' a6 n9 Z2 W) d. ?; b
    INTC_INTMUX1 = 0x3d;
- w. T, `4 J+ N! x# B) f5 u    ISTP = (unsigned int)vectors;
. S8 j  n, {8 }5 R( O: t* L    ICR = 0xFFF0;  
" ^6 H2 @3 u8 w" f$ N0 {    IER |= 0x12;  
  n4 p- U# |4 W9 ^    CSR |= 0x01;  : f) \) f7 G2 }, M9 Q  D

8 E3 }: B- }7 Y# s, v
2 T# v2 k  N" I3 [9 H7 I  P
, {  H; Y, B  L, x2 |. @, @$ R, o还有就是两个输入输出函数:
8 a, u( M  ~. \void output_sample(Int32 out_data)$ m. {/ G3 A( Y1 s! R
{1 d( L) Z& M  G) ?# k
  AIC31_data.uint = out_data;  . f. _4 O; ^) \- w
  MCASP1_XBUF5_32BIT = AIC31_data.uint;( `" n5 P2 _1 y" B+ y7 B
}3 E% n; v( s; V8 }( y. w5 F
. {3 F4 Q1 }$ \  `" J7 O
Int32 input_sample(void)+ a/ W, i. O# M' X7 z+ [
{  ' u% `, j; ]  O6 S) o" G
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
+ h' N3 K6 ?3 u  return (AIC31_data.uint);
/ \  \6 X$ Z% e  q2 N}
: m/ y+ b- g6 M1 G$ Z
2 i9 w/ h! N: C, X: N
分享到:  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-1-21 04:26 , Processed in 0.069295 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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