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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:6 W9 O6 G" |. _# n* e  H9 h
main文件:# g0 e; H2 G7 |, f4 @
interrupt void interrupt4(void)  
+ j( W1 w. `1 e* I{. Z( F5 ^. ^4 O' J. _: ^: W
  Uint32 sample;
& ~  y7 q  M% `. t* n
0 k) Z% k( F& R$ p% k1 F  sample = input_sample(); // read L + R samples from ADC
# T9 H# s/ W9 O, K. L  output_sample(sample);   // write L + R samples to DAC   x$ R7 }, q# Z6 {
  return;% Z$ @: r; y" [. A* M
}
& v. T0 k# O4 Z- K  d" l' G* K8 v, Y' k" f4 P$ f8 t7 [
int main( void )
1 d) w. f2 h4 ?* A6 X- Y6 w{
8 k$ R3 `( e3 U9 M. Q" h, x; b2 Y% V( E* P+ L( {$ \
    /* Initialize BSL */
" ^8 {7 \& W7 v; X2 O7 j    EVMC6747_init( );3 `/ ?" j5 @7 K, E3 F1 F
        /* Call evmc6747_intr function */
% G2 v; }! m  m1 Y    aic3106_init( );
! ^6 e" N' y& }1 l5 r# X* Y. D6 B  _        while(1);, r& V3 ^/ i  K3 s
}
0 U) M! L; K$ s0 e' K
' }2 A5 C* O6 M" W- B# X- |6 o* C! U* e2 U9 K% ~1 x8 g( I$ {
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题; S" v6 ~) }) E+ `, Q$ N
/* Initialize MCASP1 */* {- h6 ]- ]8 B' U8 }
    mcasp = &MCASP_MODULE_1;
# j) W5 C" U' F. {    mcasp->regs->GBLCTL  = 0;       // Reset4 I4 W: u% m& \8 `' z$ R5 {
    mcasp->regs->RGBLCTL = 0;       // Reset RX* c! X/ E) P( G, X* s- I6 s; Y
    mcasp->regs->XGBLCTL = 0;       // Reset TX9 ~6 O- T+ l, h8 n! T
    mcasp->regs->PWRDEMU = 1;       // Free-running
7 |" }4 C4 T- n! D   // configure McASP0 receive registers1 A5 D% i. }4 {4 l) Q9 G
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
# s$ v7 H5 K7 `1 w. W* S    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- `, M8 m: c! ?6 W4 ~% z5 j    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
0 J7 \0 p6 e; C    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)) J: ^/ K+ v- r' q8 f/ y
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
- P& |. H6 s( x" F    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1  \( J- v6 ?* h* O
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
! ]% A' t7 [. u8 ]6 H9 X    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* U+ v- ?2 g. Z" l1 P, p

" w3 q3 L3 w% @. Z( Q6 Y    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
0 K$ {5 l5 E! f8 R0 D    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' e1 R2 b% X/ o- M
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word7 x/ ?; o! m! ?4 G- @
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16+ X7 B6 f1 [' v) ]* J2 Z
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
* x2 Z/ Z8 Z6 j    mcasp->regs->XTDM       = 0x00000003; // Slots 0,19 s* H- j- _! G, [: _1 H; s
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit; u, L; N* _3 v' o
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 L: S- G& q/ b6 {( U2 ?9 _- b

4 Y0 F$ m/ D& f    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN" p  n$ q$ [, }) I+ g  q
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
: ^4 d' G% f, {7 z  q    mcasp->regs->PFUNC      = 0;          // All MCASPs
: A- `  e9 Z  N/ U! _) Y# I    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1! J8 _$ x! V, R0 ~' p: G
' q7 O6 [! L+ O8 N. A) i/ Z6 u
    mcasp->regs->DITCTL     = 0x00000000; // Not used0 ]) V2 [: c3 ^! c+ x  S
    mcasp->regs->DLBCTL     = 0x00000000; // Not used, i: N- K3 _; V2 C7 [1 P( Y. T! Y
    mcasp->regs->AMUTE      = 0x00000000; // Not used6 M7 i) a! v# i) i) ?5 [

) X  y& W2 U& Q5 ^0 g& R! O/* Starting sections of the McASP*/8 I$ x0 h! M+ v( T  G  ?* l' l' E
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
: H8 Q# \0 u% {    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
/ k/ E, L; e# e    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; & A" ~% ]( C( \  j/ W
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );  H3 o+ J$ K6 g1 K
/ L+ W' P. e' E. V* x% L
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 4 o$ h/ ^! `: k& A
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
" c7 m1 Q4 X( t! x9 C8 m8 S    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
9 n) E/ [3 l% g$ C& |! ?7 V, T5 V! y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
* {7 @+ p3 l, x; g: p0 D: F+ p' v& G1 k, K( v1 f
    mcasp->regs->XSTAT = 0x0000ffff; , \7 P+ g& G/ U. E9 l- l
    mcasp->regs->RSTAT = 0x0000ffff;
3 ~* F) p5 `5 j3 E7 ?3 O, m% e7 X; I2 z7 c# r
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- ^$ W  P3 B- |    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );3 j# \, O' m: y
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
4 q4 b8 p8 A4 [) N, s    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
  F$ E# k  _7 k- V2 L* g1 N1 U! z: c4 C
    /* Write a 0, so that no underrun occurs after releasing the state machine */* z; I) \/ f0 e3 {
    mcasp->regs->XBUF5 = 0;' H6 D4 {7 Y8 r2 [3 ^
    mcasp->regs->RBUF0 = 0;3 j, B( e. Q* |1 Y! H

- |8 V/ X6 D, j/ R& z7 I# G    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 6 s6 d/ ]* z) ?' c  Z9 S
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );  L! M! K9 }; D
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
5 U4 J: K5 p9 |+ r    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
5 n! D) ]9 c0 K* Q
  c2 [+ O# `, v# @7 a    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; * B- r2 q% t3 ]1 V  l
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );! [3 k( w- c- J/ Y( @' v. G
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
3 ]% T- {7 X' \9 }    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
6 S! A& }( L/ o
: h+ K# j& L: @" @6 w9 g    CSR = 0x0000;
( s& V; b  h; J$ p' l    INTC_INTMUX1 = 0x3d;
  y6 n. [9 Y. ~5 S" R    ISTP = (unsigned int)vectors;
( x; Q' ~3 g, i; c5 d9 o8 W    ICR = 0xFFF0;  
- P- U7 J5 V, V" |# C+ l    IER |= 0x12;  
4 A6 j4 k9 E6 Q& G  U    CSR |= 0x01;  * z& t4 R4 S: |1 J4 @( q
' R1 A7 `( z( `% J& n
8 {% J; z, j, b$ U3 x

% w8 K" i8 I! k0 _0 {+ e6 w还有就是两个输入输出函数:
/ Q. k% G( ?% N/ J. ~& s4 r9 tvoid output_sample(Int32 out_data)
# ]: z+ t# b% k% o/ }{
& E- {) V' L0 I1 U+ P5 _; T6 f  AIC31_data.uint = out_data;  
, t6 X* [0 m" `: v  MCASP1_XBUF5_32BIT = AIC31_data.uint;! [8 W# P- ^, _& a
}
" [! C5 L( u% Y0 [0 A( M+ T* w, Q5 _) M0 W1 F3 j
Int32 input_sample(void)
+ r# w4 Z$ N0 W" M" s' S{  
) L6 H- s4 S* A2 p  AIC31_data.uint = MCASP1_RBUF0_32BIT;
; G! o! a  Y8 U0 [  e) X  return (AIC31_data.uint);
. K- ^! b, j& `! R3 ^  I}2 i; B0 A7 k3 |: \+ V9 z
, ^8 t$ H: [9 X6 e
分享到:  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-30 12:48 , Processed in 0.041728 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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