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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:8 [7 H( ~! J* }
main文件:
. q0 k1 N. q5 }, d, J# Ninterrupt void interrupt4(void)  
  o  v7 I: x. w% P/ H{
4 {9 l, q( r1 l5 w; H  Uint32 sample;
) }# P7 c) N/ [: k/ Q$ J2 E" w
7 H* J* ~! }' M& D& ~! n7 h  sample = input_sample(); // read L + R samples from ADC: _1 D4 _9 u- z' }( T
  output_sample(sample);   // write L + R samples to DAC
3 S% v+ P( M/ X  T6 X5 Z  return;' b2 r4 S* Q5 X$ I# q
}! }8 q& c( J* p! Y, [9 V
+ c: e4 d  K6 Q3 x5 h: y) x6 b
int main( void )( Y) z7 f1 w1 p1 v  T" j
{/ ?8 K6 B6 [5 T% h

# _% w8 G8 ?. h) I$ v' a, ]    /* Initialize BSL */4 R# z8 m3 C$ W) a9 M5 @9 O
    EVMC6747_init( );
9 e" G: [* s( u1 m# |% A        /* Call evmc6747_intr function */
- c2 B" W8 E3 G& X1 f+ K    aic3106_init( );
* f; q2 r  y8 P" J3 b8 t        while(1);
3 T- x1 x( n! S6 ?: U$ \, L& v' X}
! z) A* g4 @8 b( l) d3 A
# V3 ?. `/ y3 W/ s& l5 |
; F7 t" Y* {& N' d- t% Laic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题/ k/ l) e4 l$ B2 w; m5 Q
/* Initialize MCASP1 */
6 ~9 u/ }; ~! e; h) E, z    mcasp = &MCASP_MODULE_1;
9 X! C7 H4 U( w    mcasp->regs->GBLCTL  = 0;       // Reset
7 u3 {' h% C1 A" {+ H3 s    mcasp->regs->RGBLCTL = 0;       // Reset RX
* S: w& \% s$ e/ ^; m    mcasp->regs->XGBLCTL = 0;       // Reset TX6 X$ S9 j* Z5 s
    mcasp->regs->PWRDEMU = 1;       // Free-running
% w' S3 g% G3 m: O$ W   // configure McASP0 receive registers, m7 s6 q7 I: {$ G
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used' Z! @, o- L# b& y5 Q1 U8 @
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 U6 H+ }1 p4 n4 z( h
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word  H% j0 p$ k. C! V- z! @" }  t
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
7 j4 |& f+ `- \# `& K    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
: V6 C$ @: Z" s/ w& `  j    mcasp->regs->RTDM       = 0x00000003; // Slots 0,11 s. i7 X3 z" o  c
    mcasp->regs->RINTCTL    = 0x00000000; // Not used/ ?9 |, K6 n7 V
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
" P+ F/ J- [! p3 f  P& {( V2 N: \( I+ d. t; X; L7 C
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
9 X* \' G6 G! V$ S7 H) @5 ]+ M5 x    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus# `- s5 l( I) a+ \4 P
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
! r' n) A% F# [    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16- f  E  }. ?. u
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK" K+ d* ^% O( `9 S* Z- j7 I
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
  n4 Z  z( m. [8 k/ Z! F' H    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
1 G5 C2 T  b' r' k, Y5 G) B    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
0 N& i  Q6 p4 G* k" U2 r  ?( ?+ P
* [8 H& o" C* h, A3 T9 g" U$ x  i    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
& g3 J3 M9 z. d# d/ O    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT7 |% P2 G' A5 r7 G: R1 ~
    mcasp->regs->PFUNC      = 0;          // All MCASPs
- ^8 J& s( s' i7 T1 q    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
5 {7 e3 W( @6 R5 l$ \+ C2 [' f# f5 y' v+ a2 T
    mcasp->regs->DITCTL     = 0x00000000; // Not used7 `3 ]/ l& U, r# [* y
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
: W# ]" ]) s4 n4 Z. y; A4 O) x    mcasp->regs->AMUTE      = 0x00000000; // Not used# ~2 Y. c  n5 u; W

- H/ _* @- N8 ~# z/* Starting sections of the McASP*/
- z7 [$ a+ T9 a0 M1 n    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; / ]3 t; G' n9 G" N0 o# B
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ; p6 k( w. P( p+ k; a( r8 a
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
: I+ ~/ a7 B" {' j6 ?* s    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
; n. Y* E# }. p# X5 ?, H% o* B" x) j5 L$ }  \6 s3 R
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 8 B7 ?2 H0 P1 S7 d5 h
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );3 ~# R) j  x- X
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; # L, W, o; I" B
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );6 Q! L. a& D1 o& b( V

( S2 a% P. ^: J, i+ C    mcasp->regs->XSTAT = 0x0000ffff; ) g- f8 [3 U! }$ D, s
    mcasp->regs->RSTAT = 0x0000ffff; , R5 b& s. L  ^! p; P
+ E/ o: B6 S, r4 Y/ E. `
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;. {' }/ q, m# K( M: q( P
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
8 {* e2 S" Y% v  l/ n2 I2 M    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
7 D) f) ]% F2 ]7 ?/ w' p    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );; N. N# ]: F: z0 d

: h$ b3 I) r0 y; A/ `. J. k; _: [    /* Write a 0, so that no underrun occurs after releasing the state machine */7 A2 K% q% J4 V8 _! H# j/ S6 d
    mcasp->regs->XBUF5 = 0;$ `. u* }3 B) E5 K" ~: J
    mcasp->regs->RBUF0 = 0;0 @; Y; d3 T# I
; B/ F9 d5 ~" ^1 f* E
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; * f0 L8 s  `. y$ k2 I7 d. r
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );0 t. b  c" r) ?; d
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; & D+ [8 M9 ~3 U8 [3 \! A- V
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );+ e( F3 x# r: @: @
: H, E  R3 C2 n& c, X" v8 V
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
* I( k5 n! H" C8 ~# q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );+ ?# H( z2 _, o6 ]5 A
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 6 E1 o- ]0 j. E, q$ k  N/ K7 o
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
' G# p/ K  |# q0 z6 G' M$ A& J# n* s6 L* Z. [- M: o' }
    CSR = 0x0000;
, C: M: b2 a- ^+ g$ B    INTC_INTMUX1 = 0x3d;/ j9 W- z  P* }9 G
    ISTP = (unsigned int)vectors;
' h; E7 h4 t+ ]$ t    ICR = 0xFFF0;  
( N! |8 Z8 P+ W( @. H    IER |= 0x12;  4 o" u9 d) F- {
    CSR |= 0x01;  . S! F1 i. e1 i! t5 S

% B# p+ T: L% R3 p( ]5 N" }4 e. z/ c# Z7 c. \" K8 _8 U, Y. }3 L. K
; s; @. F; r5 z0 _- y
还有就是两个输入输出函数:
. m3 p& Z4 J+ _void output_sample(Int32 out_data)1 `- U" r5 b. b0 V3 P9 ]9 o
{
$ }( ]/ D: A0 C9 c  AIC31_data.uint = out_data;  % ]- G7 `% H" n  O
  MCASP1_XBUF5_32BIT = AIC31_data.uint;$ u+ O+ r) u' `7 `/ Y- W
}
9 R# j8 o  l3 q# q9 Z6 I4 ~% a; G! s" A- |( F1 v# {
Int32 input_sample(void)' q4 x  k, `- G: w
{  
1 y% y1 Y# r# e% ]) Y- }" X* X  AIC31_data.uint = MCASP1_RBUF0_32BIT;% r4 X' H! N7 K  z
  return (AIC31_data.uint);
0 _0 T: ]! K0 [  U: ?  @3 w}
/ t% c" z# [0 b7 H; m: R  {4 z9 I" D1 K1 ^7 o+ f6 d& S9 |& J
分享到:  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-31 00:44 , Processed in 0.039877 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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