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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
* H# {: [* X& w8 B/ B" K4 ]5 E1 rmain文件:6 W  S6 A9 k/ V' C' _
interrupt void interrupt4(void)  
$ ^( H0 H& U4 Z5 G0 Q6 T" _' @{; o+ ]2 M( m8 e) c2 A! \
  Uint32 sample;3 [) v  N7 j! E% H6 o. g2 G

+ o) G- a! Y. A/ G$ h4 f  sample = input_sample(); // read L + R samples from ADC/ a3 ]2 q8 L* B+ x
  output_sample(sample);   // write L + R samples to DAC
3 Z( G1 H6 u) |3 W8 p  return;
  `4 p2 ?; q: w/ j}" z  T0 J. p* g# X& ?- M

0 j( T, B+ X6 [% i; p$ [9 pint main( void )9 L2 ~6 n( O9 i- W" d/ Z
{. v9 x" z3 L5 N7 k* ^( v  i

' v% M0 b# l/ K7 w    /* Initialize BSL */
; @9 o. ~; e5 `    EVMC6747_init( );
) i' ]8 a; J# a% a. N. n        /* Call evmc6747_intr function *// {* R3 Y' G9 T
    aic3106_init( );
! i% Q! r) `& O" P9 @        while(1);
% ^( T4 I* s% D9 n4 K}
- b, w0 W# a( N' Z0 j% _) a% u4 C; P: ]9 ^' G6 {. p

7 C5 C' ?' D. e4 ~- xaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
* I* R: ~& s6 Y1 J2 W/* Initialize MCASP1 */' D7 A: A( C+ t5 Y& M' R/ s( D$ x0 o
    mcasp = &MCASP_MODULE_1;
; S" Y6 G. k7 o  e$ \# ^    mcasp->regs->GBLCTL  = 0;       // Reset
0 h+ z1 a" G* |0 V+ R  O4 ^! q% ?    mcasp->regs->RGBLCTL = 0;       // Reset RX9 W: a% L9 _' L) Q
    mcasp->regs->XGBLCTL = 0;       // Reset TX& z- J) r8 |: K# B
    mcasp->regs->PWRDEMU = 1;       // Free-running
% n* h( x, E4 n2 F0 E1 K/ D   // configure McASP0 receive registers
( i  U; D; R* @# w    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used# P7 D* ^) u6 |, Q
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 h! n3 ~- v" s$ }    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word2 a5 s* P: O0 \6 r
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
" b, X, I: Q  h. M    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)& \  o" p3 V$ i; q: o
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1& b; f; _# S% M: F5 B8 h
    mcasp->regs->RINTCTL    = 0x00000000; // Not used1 X1 N# w$ U& ?
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' ^( g  h8 P: |6 M* L

& F, K* S# l* Z    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used! [& h" j6 z+ R& Z' G' H& A
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 y. N1 P1 O, ^5 w* E$ N    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word& J+ b* U1 U( H
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
- z# q( t/ _! C& m    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK) W* t& Y' s7 [5 @: P, e; x: D. k: p
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
% N, d3 i9 `% T    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
0 O5 ]1 w9 w) ?& u8 `+ F3 N    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
2 |5 x. Y" K( V8 m6 H9 t; ]2 a& L7 Z! N
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN+ Z- a5 |' A' M& u* w' }+ {
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
8 g9 K5 x4 K% t$ s: a    mcasp->regs->PFUNC      = 0;          // All MCASPs
: h* [- }$ s* ?" C6 W* s    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
: Q5 o2 X9 D, @6 [
  i8 h" G+ b% w- q' l    mcasp->regs->DITCTL     = 0x00000000; // Not used3 V* e; H9 ^" d. e5 g! T
    mcasp->regs->DLBCTL     = 0x00000000; // Not used2 o0 w' F  A) u8 m3 K  c, x
    mcasp->regs->AMUTE      = 0x00000000; // Not used
3 D! s4 |0 c+ Y1 L5 i' j, u, B; e: K- o1 ~
/* Starting sections of the McASP*/: v8 e1 Q% y5 b  {9 c, p4 e% W
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; . J: j) N& j" h1 [+ H
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
+ Q5 T& S8 N6 b) W    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
# ~9 P8 C. N4 t' m9 M8 |- a+ h    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );. Q7 l9 u: O9 G" x
: J# I; |- B4 E0 R
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ' `6 n; s4 d' \. ?0 t3 v
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );% o7 n9 G2 ~  W2 X8 ]& Y
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 2 y: ]5 F; C! o' _
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
% l0 k5 V2 z$ l( P* [" G. L+ e/ Z+ u( b3 F$ m
    mcasp->regs->XSTAT = 0x0000ffff; / d% p' `, {* F3 k* l! c4 X
    mcasp->regs->RSTAT = 0x0000ffff; - a- }$ x, _: n$ N7 W  N/ `

6 u' ^7 B( f* X. q4 p    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
! |' W& ]% p5 A    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );4 b1 k% N4 v+ o+ \% N
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; * k9 d$ `9 x/ v8 u$ B7 D
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );  F* x) i% R. S6 ^4 _

# v9 L3 W) ]0 z6 _5 L' @# ~    /* Write a 0, so that no underrun occurs after releasing the state machine */! b+ h1 K) H. |# ~- y
    mcasp->regs->XBUF5 = 0;
4 }- \, T: {* k& I% ~    mcasp->regs->RBUF0 = 0;% @) U& A/ T! \; t  T

$ I7 G; C7 h$ ^    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
2 b+ ?1 X$ s1 e( x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
% Y" A6 R: w/ f7 A    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 7 X9 J# q) z" o0 C1 v
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
" s9 G+ n. i1 [, ~3 x( e1 S" `8 D+ V+ K; N; q/ }" `
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
7 w; j8 \7 Q; b) r' j3 y    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );  i$ I0 z! G4 s; F2 H
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
9 ~& r) f5 a& J! z. u' \    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );, }! Y$ G! W' b$ a. y
# x# f+ Q5 ~8 Z9 |) K6 C9 s% U
    CSR = 0x0000;3 T* W" G1 V1 f# g7 H$ Z* E( B
    INTC_INTMUX1 = 0x3d;
6 S1 j. n! C5 T- G    ISTP = (unsigned int)vectors;
! a: C6 z1 }2 d' M; S& I    ICR = 0xFFF0;  * J" F$ X$ R' Q0 [* o
    IER |= 0x12;  & c5 i7 Q2 `( p0 ^. s
    CSR |= 0x01;  $ h  i  J) S& A: e3 J8 ]" n" l# i

$ p, N( u. J* N+ N% f5 ^/ ]+ P( E( N: p  e4 `. N2 Z9 k

, ^; C" m. m7 Y, |3 N还有就是两个输入输出函数:! `! W& U% O$ I3 K0 }4 I! D' `0 v
void output_sample(Int32 out_data)! h5 \. @! R1 P( P, r$ C6 \
{( p2 D" M7 G+ V) E
  AIC31_data.uint = out_data;  
* m  |0 y/ g/ R3 x, k! F  MCASP1_XBUF5_32BIT = AIC31_data.uint;& }( k: g1 g$ f- O, H
}" E, J& \: }) o; x: d. x
4 Z" m9 _; F: z8 H
Int32 input_sample(void): Z) U, y2 b! N# `  ^) u7 B* T
{  
( ]5 _; |3 c+ u& z  AIC31_data.uint = MCASP1_RBUF0_32BIT;% N; y) s$ l: V! b% s
  return (AIC31_data.uint);
8 o. E" O7 R, M3 h}
$ I1 R  f9 K3 s6 }$ r
  A/ j8 Z) g3 E6 H9 x- 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-2-18 05:24 , Processed in 0.041975 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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