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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
+ y) I, U5 u; nmain文件:, h; ?4 _" k4 s* a9 e8 |2 i
interrupt void interrupt4(void)  
5 A  _. P5 t6 m% Z{6 q2 N! }# W  T, d1 J4 _
  Uint32 sample;
, c/ T; [, P$ U6 V5 K: Q2 A: G6 P. {% S! r/ f0 }
  sample = input_sample(); // read L + R samples from ADC: Z" B( o; Q2 ?! q
  output_sample(sample);   // write L + R samples to DAC 8 k1 D2 q9 @5 Y0 |4 S" i! T# [, R
  return;) _8 V7 y% o2 G
}
$ o, j( Z# c7 |" L! e! T7 Q9 N4 ]
int main( void )
9 y  O+ T" {- ~$ k' t2 I( W! _# e{
5 O/ P+ |7 E- Y, }7 |1 _! H& r1 W- ~. q. [, J7 X* H; l2 r$ l
    /* Initialize BSL */
4 z- m6 k4 r% B2 S6 n    EVMC6747_init( );1 l, Y9 {0 d/ r1 H% a8 r' B  v, y# I
        /* Call evmc6747_intr function */
1 {6 M7 a1 E! h' c+ Z    aic3106_init( );$ ?( I4 i: T* @% a$ `, o5 ^
        while(1);/ ?3 g' J9 m# s# G: \8 p
}, P/ i8 M5 Q# r

, S1 d1 |( {% ]! z8 a% Q$ O6 D, e2 A) g
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
* |3 I; O1 E+ M3 P' |# T. N2 J/* Initialize MCASP1 */
; a8 M) V, U  m2 @; Q) o+ d& N    mcasp = &MCASP_MODULE_1;, R8 w; e7 P7 c) Y
    mcasp->regs->GBLCTL  = 0;       // Reset1 U8 y8 Y& r9 i2 U* V7 Q
    mcasp->regs->RGBLCTL = 0;       // Reset RX
' I: U9 t9 O5 y. R7 l' V* u0 x5 j: P" I7 D    mcasp->regs->XGBLCTL = 0;       // Reset TX
; W9 s5 D$ A7 H6 S& A& P    mcasp->regs->PWRDEMU = 1;       // Free-running, i$ |/ G  _0 q" t$ y- a4 J
   // configure McASP0 receive registers
/ [0 U6 k4 W. K1 `( T* c    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
5 H# N0 E! v7 X8 ]    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' k% P& e$ f+ O
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
- [6 i1 t5 N$ B( i: g    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
. f. I' b# a, {    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side), T- E6 B* h/ B  P# Q
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,14 J. b% t/ h3 R+ E& J/ f
    mcasp->regs->RINTCTL    = 0x00000000; // Not used' P  c* F5 B; A" U! |& A
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256# V/ S4 p' `5 ~6 Q" d7 h! `
$ F; u, B" V0 E: ?. ], n
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used  {7 P( T9 v6 I* ^( C
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' E" I/ f' t% i7 u    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
4 m8 ^" Q# o8 w: M6 C$ h    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
0 I. k0 |6 t  ~6 b    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
& }. c% `+ {6 K; E    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
% W: ^/ u$ q; y7 C! i    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit, K$ o+ d6 C& r5 F$ L  N( r! Q& B
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- b$ g! |5 P& X  l/ W/ ]5 R' X/ M% Y- n. u) [8 R- P
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN, t1 w9 {4 ]7 W0 ^+ F! ~
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
: q& d, D1 j, H% u. x    mcasp->regs->PFUNC      = 0;          // All MCASPs
7 b$ D" z- E  p( X4 P- W    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX17 Z1 r8 g# f0 I) e% q& _
8 p, o  b! H3 n; j( A3 _/ U
    mcasp->regs->DITCTL     = 0x00000000; // Not used$ M; `& \3 L9 k  g
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
3 V7 b" X2 i  m: N9 o    mcasp->regs->AMUTE      = 0x00000000; // Not used
" f* A; Q0 ~( N: Z) x& U: Y# K9 a/ }
5 E$ b% {; h; \* e8 O; W2 ]/* Starting sections of the McASP*/" R8 N" Q7 C  D6 }4 K; P. `
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 8 x. i4 P2 }) q5 v( Q2 a% [& c
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ' t! k! C6 M. `) o
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
5 }( `0 ~- r3 z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );# m5 E, m2 d2 g; u

" X  \6 k% g& x- ?" w* o    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
3 b/ O$ L9 `. t4 n# {$ c    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );4 s/ G1 {( l' l' r4 U8 U
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; # T7 f2 k8 W9 u8 y0 h8 Q
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
0 G; ^9 \' v. l" \9 K
0 n& e5 D. f! c' d2 M* @    mcasp->regs->XSTAT = 0x0000ffff; . l5 C4 w# M+ Y( f+ r, ^9 o# k
    mcasp->regs->RSTAT = 0x0000ffff;   [. I+ ]$ F0 y* T3 K9 l/ W' s

4 p% L: T: d8 O, _    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
4 i! ~5 A3 {# L. A6 n& f1 ?% F/ a    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
: q6 X2 V6 F& ?) k5 ~    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ; x: R& S9 v$ h2 C/ k
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
: m7 o/ g+ {' ?% P3 f" _) L9 w/ H* a1 \. z. b8 Y
    /* Write a 0, so that no underrun occurs after releasing the state machine */* R* S8 N9 |4 G4 v& d2 r+ G% W4 g
    mcasp->regs->XBUF5 = 0;6 \1 R% y7 F2 W" Q
    mcasp->regs->RBUF0 = 0;
) ]) U' X1 \  b. N( @2 I1 d& S; o* x7 z9 s
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 B  m' W: D3 |6 m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );/ L) i" E, ~" S* {' O
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
' b" m1 M% W( g; M    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
& C' Q$ y, [( ~8 [  _
. Z$ |& ~- d$ Y. S* {. Z    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
/ o6 f  Q6 r2 _' i! z+ b! P    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );  T: R0 s) B% `8 {- N* v
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
; ?7 A) S, \# `- x) [* h. [    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );1 N5 p- J5 {* z; p: y, ~9 i

! {& ?6 q+ Y6 X0 ~' P: Q    CSR = 0x0000;0 H; q& }1 `7 O- q1 R/ L
    INTC_INTMUX1 = 0x3d;, A( l& Z+ |$ L
    ISTP = (unsigned int)vectors;
* H' M( r& s. M2 w, [" X    ICR = 0xFFF0;  * |+ L5 A9 p, W% m4 D
    IER |= 0x12;  * ~; _* F, v) o' D
    CSR |= 0x01;  
! y4 u$ n; Z+ t( ~  \6 p1 S. g' O8 X( T' h

  Z' N2 C% B0 T' x( A- X" x2 |) u* b3 y0 T
还有就是两个输入输出函数:
. b2 Q8 ]. I& g% g& R4 Pvoid output_sample(Int32 out_data)- G! i' s/ l  d7 _( Q$ {
{1 E" n+ _$ l# |( D5 f# |3 p4 B9 k
  AIC31_data.uint = out_data;  
' t( a- ~3 W: S  MCASP1_XBUF5_32BIT = AIC31_data.uint;6 \- ^  L& ~$ Y4 ~) U
}' f3 @- @& d$ d* d

0 v  {0 d# q% k- x& r# BInt32 input_sample(void)) M. t, ]% |+ ]! _1 a
{  
. {% Q0 h  n) J2 z$ G  AIC31_data.uint = MCASP1_RBUF0_32BIT;
/ u  ]) r7 F5 [! @1 r/ T  return (AIC31_data.uint);
3 q  @- i/ l( A! a- N}; I8 \, F! p$ z9 l

7 z  x# i! z: @! v$ o( 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-13 14:03 , Processed in 0.049736 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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