C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
! y) j  B4 P* F. U- umain文件:. e; B2 Q2 N; p; V  ^
interrupt void interrupt4(void)  ) w7 r* @6 f) g; g; J; y
{5 i* o9 w1 T7 |! d" n7 `# t
  Uint32 sample;0 U8 N8 B5 y# h3 r
" }" z6 X6 M0 Q3 m# ~  }% Z: S
  sample = input_sample(); // read L + R samples from ADC! Q/ u% T! p, m0 k2 F
  output_sample(sample);   // write L + R samples to DAC ) X' D" p4 I: x
  return;: @2 O' X. h/ P# \4 t0 m) I
}
5 q4 g' T" j& ^; T. f& F6 h) S9 M4 w
int main( void )
6 T/ K$ a. j- D7 l3 u% S5 {6 l( s, ~{/ N, [, ^1 u% J5 \* e

* d$ U" i" i1 G& A: A    /* Initialize BSL */  X' s' I' i/ g2 ?! k  Z
    EVMC6747_init( );, f) X) s. [6 D/ J8 }
        /* Call evmc6747_intr function */
1 @7 h' g% c1 g- |: o    aic3106_init( );
' Q; C% V7 F5 f        while(1);
' ~" S! _% Q) x! w6 A7 C% }}+ J7 Q' b9 C& n: y

2 w0 @  ~0 x+ |! \+ c$ B+ }2 \9 D1 J. F2 s1 L
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题" s& H0 k2 F( J. Q
/* Initialize MCASP1 */. D+ }! E/ s5 q# q4 v3 K3 w9 k
    mcasp = &MCASP_MODULE_1;: `* y$ H4 k2 T
    mcasp->regs->GBLCTL  = 0;       // Reset0 U/ @+ a9 d: n8 E- y" w
    mcasp->regs->RGBLCTL = 0;       // Reset RX
$ v+ \/ }# K6 E1 e) b    mcasp->regs->XGBLCTL = 0;       // Reset TX
. m+ s2 T6 F9 S4 m6 D, B. n) `& R    mcasp->regs->PWRDEMU = 1;       // Free-running
6 ]( Z( J; G9 U# a7 S2 `& O   // configure McASP0 receive registers( Y6 X; x9 Z' m/ u
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used" n% T1 `4 G+ _4 S' {
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 I' u/ {6 Y+ ^' J# ?, h' q. W/ o# ^
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word, r4 t. u9 B( g7 a( F1 H9 l
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
- P/ x) b; ^, O7 l4 Y    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)- O  ~, }/ m3 W8 G; ]$ J
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
$ N; a, n. X; ~$ m$ H    mcasp->regs->RINTCTL    = 0x00000000; // Not used
) d& w, Z* N% A7 K9 n7 N" O    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256# F( B8 w, O% _# Q, W' o

' ]& F/ I4 ^) G: Z$ z" m    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
  ?/ L5 t8 l& {- [+ \4 A    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
' \1 I: k1 M! C2 d; b7 r1 T# C+ c    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
) W! }# A5 g7 T0 X* N( k    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
# p5 h2 G& G7 O* \& D/ s    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK3 H9 m8 ?/ J! g# v' w& i
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1% u+ K( p3 W. ~6 j0 C5 p# V
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
8 {3 y2 ^, h8 R* o5 @    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256; }5 H+ c0 I% ^" U9 u

* x6 g; w6 a' [; z: }    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
+ K( W: j) S1 D! h( V# Y# ?    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT, {4 A3 F% h" I0 X
    mcasp->regs->PFUNC      = 0;          // All MCASPs
, W3 S! I* _. Z4 S! B    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
7 [( i4 `# R- ^) X" |) q
' o6 E% `0 I/ k5 z$ K0 q- k2 e* \    mcasp->regs->DITCTL     = 0x00000000; // Not used$ `7 v0 |$ u, Z0 x% F" k$ X+ o8 I" {
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
- K( ?) P7 K4 t& o; r    mcasp->regs->AMUTE      = 0x00000000; // Not used
, l! a) @2 A# n% j3 z
9 W4 ?% H+ V' ^* o* R/ E/* Starting sections of the McASP*/9 ]( A4 w4 f# m0 d: p% q
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ( J" M; W' u. m, s) F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
7 k1 ]" J8 J5 `, d    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 0 A% V- e) O' m7 {
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
" N0 i) G4 U4 V9 @
4 E; e, O9 E; [' G9 @. p    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
$ \. c' |0 s+ F2 ]8 p    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
9 J- [# E, H" E/ S" M    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
* P, @6 \4 K# l: b! S    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
2 Z# ^9 o. Q8 P! t" |3 W. @) s# a& g2 t
    mcasp->regs->XSTAT = 0x0000ffff; " ~# h) n% N, L! a' _& T
    mcasp->regs->RSTAT = 0x0000ffff; * P5 q% g) H. r3 n

* c+ c+ w, w) \' N) N    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
' x) |- B. c. E/ ^    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );) j& O. e/ V/ E# B
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 0 p+ z' g& [6 e8 }4 j
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
( K0 d% l, D- p- A& }4 r7 V0 B. l4 W" R4 g/ ]( D' N
    /* Write a 0, so that no underrun occurs after releasing the state machine */+ x  Q* p) k& [8 ~) d  |
    mcasp->regs->XBUF5 = 0;! p# e: P0 R2 \* D
    mcasp->regs->RBUF0 = 0;
0 S$ Q- Q, ]7 d3 r% Y/ P* L* g9 G9 [& h4 A6 i8 ]
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
9 p1 T. O- d2 {    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );2 ?- W7 Z5 T: I, f9 N5 T
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
3 l, r+ }) }9 u9 ~5 n+ {    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
" j# p4 w8 n' `! \7 M! \, R4 d) ^, X: @6 }
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 5 c3 C) L# a: @  Q% o
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
, }& N( `* J  u9 A& i+ O    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
$ v1 `1 ]8 U+ \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );3 u+ u3 Q$ ~' H5 b& N
" _2 V* t3 q7 R
    CSR = 0x0000;+ [" P, z5 L8 Y* E
    INTC_INTMUX1 = 0x3d;$ t6 n- S6 m; c6 v1 ]
    ISTP = (unsigned int)vectors;) F/ {/ H& R9 y1 Z2 T
    ICR = 0xFFF0;  9 q3 ~" L& q# U; X" d
    IER |= 0x12;  
+ \' @' w, o( @/ R' w" r2 N    CSR |= 0x01;  2 b9 r% ~  g" @) D* x
# i- G& F4 N% e" u9 l1 x0 R

( c5 N& f$ R: r
6 G  q: E7 H( g还有就是两个输入输出函数:* }& U: f( B& k. d
void output_sample(Int32 out_data)
- g" R9 {: \& y8 n! Q0 M6 h' {{6 N8 |% `6 A3 T( F) W
  AIC31_data.uint = out_data;  * D4 ~5 o; m; j7 ~
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
) z! g  }  x+ E3 P. ~+ j}
' \9 h0 c5 }4 b8 O, e/ _8 X& E  B: ~* Q$ m8 t8 u
Int32 input_sample(void)  ?+ u- c9 P# F) S) [
{  1 K; y5 N4 l6 Q  G! m
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
. R. K4 h. \9 k8 B8 a  return (AIC31_data.uint);
' m9 N" Q( E9 [}
0 @! o/ e4 I4 I4 Q7 f
8 w: B* W' b& 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-3 00:09 , Processed in 0.046965 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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