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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
9 h' r3 g% t5 ?) b5 cmain文件:2 z  I$ L0 O9 P7 R
interrupt void interrupt4(void)  
2 Q3 @& O. F9 X. Z{
7 K9 J/ \! {( ~+ Z6 ?: F7 T8 P- E( K  Uint32 sample;- F8 y4 z# h/ x1 Z: M( U" d8 n
. Y: L. e: v4 ~
  sample = input_sample(); // read L + R samples from ADC. Q4 M7 ^- Z" `0 R* _
  output_sample(sample);   // write L + R samples to DAC 8 P5 p& y0 v  H, q4 `
  return;9 U: Q5 Z! c$ x5 U( q
}0 ^# w* O6 \; g0 M

1 N, I& \9 D' n! lint main( void )6 o$ ~/ ^  e/ r: f1 a  ?. g' ~) s
{
* e+ f; O& ^% q1 b8 H# `
: j" a$ K9 ^3 G! O, {& k$ ^    /* Initialize BSL */
; H& J% o: `1 G- ?( \    EVMC6747_init( );$ t( C( T" M6 ^
        /* Call evmc6747_intr function */
5 j7 i: Y* ~1 C: O, l, s    aic3106_init( );
3 e! M' b1 L' q2 v5 a1 j        while(1);
& A" G# X( I7 k0 L}/ `: B( _: H! s/ y& p7 b

, u  R; w9 k9 k; h  @+ {" l4 m# W  q6 D
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题- n6 u  Q$ F' Q. z& N2 c+ w1 q" b
/* Initialize MCASP1 */6 z* T' e4 W! W! s0 a3 d" ^2 f# ]
    mcasp = &MCASP_MODULE_1;' j$ E0 N- B) Z) Z
    mcasp->regs->GBLCTL  = 0;       // Reset
! m7 c; K0 S& }7 U7 Q. ~: B    mcasp->regs->RGBLCTL = 0;       // Reset RX
) {5 x/ U" q& D% T2 V8 x" O2 X    mcasp->regs->XGBLCTL = 0;       // Reset TX+ U, m8 {+ Y+ c  r0 P/ z& ?
    mcasp->regs->PWRDEMU = 1;       // Free-running) b7 B% V* ~$ L' M% q, g# ~6 \
   // configure McASP0 receive registers
3 y- b% ?  I) _5 {3 `% l    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
4 W$ w$ ]7 L: j( t( E6 X2 M) ?8 W    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' E7 D1 V1 @2 e6 j    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
0 ^1 |* t( y; [, q    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
6 \5 R) F8 v% j& P9 z    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
& v( ^, J( a0 O( I    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
8 h: v9 D2 v; e/ }7 \  \/ w" v    mcasp->regs->RINTCTL    = 0x00000000; // Not used& V+ z9 e+ l; F7 g
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: h/ n: l- p# a8 {' |
/ X+ B! g: I' a2 ~- v0 |    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used7 f7 K" w' P- F5 Y& y
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) C( L0 G; T2 C9 P# B3 A
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word) i7 [5 x* F  u  R% _
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16+ O3 c" E; i6 [  j
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK; K2 j9 t' d/ I, ?. X4 T
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
# K, d: [! w/ T7 R- b% a7 ^, Z. G! J    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
# p: ~/ }+ M0 S' J% X/ B    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
/ v' F1 l# t* A9 I7 G8 k5 E" n! n
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
* {9 s/ ?, Z: `/ h/ m7 l    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT) i) V& b% d/ @, ?. O& d3 u
    mcasp->regs->PFUNC      = 0;          // All MCASPs
, w2 P+ Z; |" C0 r    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
, m. f5 h2 {- q  O5 \  ~
, A) C0 F7 ~! b9 c+ ?9 N    mcasp->regs->DITCTL     = 0x00000000; // Not used$ o. d+ B0 v7 C
    mcasp->regs->DLBCTL     = 0x00000000; // Not used/ Q  w) n4 o0 d9 ?7 y
    mcasp->regs->AMUTE      = 0x00000000; // Not used6 G+ o) D; ~( C7 L# W; V! Q- `
! T6 ]( \( F" C; D4 n$ W
/* Starting sections of the McASP*/
: X1 e( s( F8 [2 |; W    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
" A* I" H/ }  c    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  9 |- r' y( G2 a" U8 a8 a: w
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
% Q7 Z2 J/ |# \' }    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );: ~" ~, q! A8 E) g& ~4 e

" {9 F- w6 ?' P( D* J8 _    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
" _) E  g5 V& m: I8 r" J    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
, m) B$ E; @, a) w8 q    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; / \3 m6 e: ]1 n2 e
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );9 k- y) |9 z3 H& [8 j0 u7 @, X$ o: t# M

' z* P  Z% Q. O! M    mcasp->regs->XSTAT = 0x0000ffff;
! m+ |- B3 ]( ^& @  Z    mcasp->regs->RSTAT = 0x0000ffff; + U' O3 n4 L8 D6 j& I0 r
' l2 ]* V! K9 W7 ]
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;+ s. I: A0 j1 D8 F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );- o, v  T" H( @2 U  }/ p5 M1 I
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
  P- f( P* r  g: I    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
3 ?8 P3 e  _2 D9 ]' {4 L( _
% t' W' t  v# ]8 r! u0 \+ ~    /* Write a 0, so that no underrun occurs after releasing the state machine */: B5 }/ C7 a+ v' P, ?
    mcasp->regs->XBUF5 = 0;
% R: c1 a  T# n5 e6 V2 a    mcasp->regs->RBUF0 = 0;
8 I8 t0 [& }6 K% _; l" K9 U+ O% k! K9 U, D# f
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 0 |% c, u+ @; l! s1 q% E1 V
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
! X# S# Y' L* e& A6 x, b    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
- ~" y! X6 d: [& i* I    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
2 b5 e6 Q& P4 c5 Z' q- X6 J# ]1 Q. o; [: P0 l4 P- A
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
8 ~; n+ z8 C& i( F    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
3 ]! A8 u( @$ k    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 6 g- r7 T1 H, w6 E: g- u
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
  W. O4 v0 [4 r# Z4 `0 W0 i7 z9 e$ q! p
    CSR = 0x0000;; x, [) k# V7 J% @
    INTC_INTMUX1 = 0x3d;
) P$ c' F# \  F$ }: u$ I* i$ H    ISTP = (unsigned int)vectors;: ]6 ^- s0 o+ J- H- s
    ICR = 0xFFF0;  
  I0 a. x) V! c: s! I: e$ b* V    IER |= 0x12;  ' ^0 V4 y0 S4 H5 i
    CSR |= 0x01;  
7 ^7 {# O, K. @$ T
" r( H! \% E0 [# M, Z7 H7 |% {0 K. u7 ~, n0 n1 W# {: [

3 ?7 P& I8 j- H3 F: D; s4 a还有就是两个输入输出函数:
/ F  |$ f, o( P2 Gvoid output_sample(Int32 out_data)
) l4 {4 H% E- _. ?  C& r{
5 d& }9 Y8 R. y+ i9 ]  AIC31_data.uint = out_data;  7 Z+ v2 Z9 J4 z* t3 U, Q. e. _
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
( x, Y6 @. y3 L2 a- X( |$ d+ |. W2 f}, r2 @) |3 v9 W4 C

+ w* F% N2 o" _- b1 t0 KInt32 input_sample(void)
1 P* y4 e1 u; ~9 L$ v8 H+ V{  2 G5 t8 E7 K, ]8 G" L
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
+ e2 H! ~7 `& d; u& {" s( v. m( l: N  return (AIC31_data.uint);
+ v- w0 {( Z, P}  B& J4 Y; z+ D$ h
: P& v/ f" U2 v9 L! e; K
分享到:  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-3-10 02:26 , Processed in 0.045770 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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