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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:9 T- b  J) E7 y- k$ X3 p5 x1 |
main文件:& N" {9 _* G# l) }2 e- f0 t6 [
interrupt void interrupt4(void)  5 z; F/ s$ B- ]' L& w2 h
{
9 ~* c* _" G: M$ W1 P  Uint32 sample;8 A' f4 c, D3 I

6 S5 ^8 l6 e' }: x$ r# ~  sample = input_sample(); // read L + R samples from ADC$ K4 B$ _5 s- V" H
  output_sample(sample);   // write L + R samples to DAC
) E+ @2 |4 Y( E. B8 ~7 p  return;+ e6 x4 Y$ B7 X  A5 f7 f1 B9 ~
}
  i1 f1 R1 p& T' j% n/ G
% b2 t3 F# ~4 |/ ^3 Zint main( void )" S- G4 [0 M8 W' `
{1 @! \/ M0 f( n# B7 w- W& U
( N% Z+ q2 S2 @9 h5 a  U. @# ?1 p
    /* Initialize BSL */
: E% ~9 {9 u* K* P7 C. g- G) V2 S    EVMC6747_init( );+ s! R9 H- M& L  j
        /* Call evmc6747_intr function */
" M$ B" b$ M8 d* z1 k    aic3106_init( );
. T3 e& Q) J3 O        while(1);
- S# h3 U8 w; Q2 T. d}" m/ a4 t7 }( j# f7 x5 s

3 q# q% L5 h  ?' }* R  M" }. g- q. K
1 n* [* l3 n5 H$ y  N' taic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
# G6 Q; p# O' {' _, k: c/* Initialize MCASP1 */
$ m! k% `/ G$ N+ ?    mcasp = &MCASP_MODULE_1;
6 g) `3 ~+ B+ h/ ?3 I* q- O2 W    mcasp->regs->GBLCTL  = 0;       // Reset9 F( I4 A" _# V$ p6 {  `6 i' M
    mcasp->regs->RGBLCTL = 0;       // Reset RX  P& e. R) `: K# ~5 L, s
    mcasp->regs->XGBLCTL = 0;       // Reset TX
2 \. ]9 u$ V, h& G$ [$ C    mcasp->regs->PWRDEMU = 1;       // Free-running* T2 z; ]6 ]% w3 ^6 V) Q' N0 ]
   // configure McASP0 receive registers
+ l% d$ j; _# A1 N1 G    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used3 K/ {+ d1 K' R; T" A, ?
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% h% J& N8 @( u' m3 E    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word7 Z0 O7 F1 Y8 B  f1 E  `: z
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)/ l# [1 K3 e- c" P2 @/ x% a' Z. S# S
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)/ H; ]7 W( ~$ \
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
; o; z. N# ^5 X; ^  C    mcasp->regs->RINTCTL    = 0x00000000; // Not used6 `+ a3 f  b9 n1 R
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
- O) p9 A# K& y6 ?6 X; Y$ {  g. T7 D4 F$ x! u2 N
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used9 x" z' }9 w2 z9 N+ J2 O
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
" U5 ~3 j5 R. S( V' C    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
/ y: ?' [: x. C$ P  G    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
# D' p. S( j+ ]4 w2 ]% g8 o    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
, V8 u" `! d8 ^- D0 r    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
) o0 k, @6 d* S$ K/ E    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit+ M  K; ^& y$ i. A# A
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256( J7 F. N% A, K% D7 V4 K; ~5 y

' |) x! r" y: o) V: J* Z4 F    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN4 g' @8 d6 ~. s
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
& x8 c! B- q4 o4 f& d    mcasp->regs->PFUNC      = 0;          // All MCASPs3 X1 l8 R5 a4 y: t/ E& G( p$ p. l& o$ i
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
: A  `7 F( b$ P- V) H
  w( o$ T$ g9 B# I, W: l    mcasp->regs->DITCTL     = 0x00000000; // Not used
6 r  \; W$ t1 p8 y6 S$ b9 N    mcasp->regs->DLBCTL     = 0x00000000; // Not used
5 `/ ]4 o2 w: X7 N5 D    mcasp->regs->AMUTE      = 0x00000000; // Not used( ?$ G# x' r" z
9 E6 w- U$ b3 c0 s
/* Starting sections of the McASP*/
/ e! X6 E- _* r- B; ^) s    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; . J' s6 u4 X8 J, J+ ?
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  " \# R; U: v5 _% C: Q5 i- z
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; ( r0 j  @0 m* u" a5 w& Q5 w
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );  A" N* N# ^; F  H- z8 l

# Q% ^) W& T$ L  \% Q3 S+ A    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
  V: ^7 u/ A$ c    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );) O4 \- \5 |3 |5 z
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
9 v: D! v6 X7 p. s+ _    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );. ~9 i; W2 e) E& t5 m0 \+ w

( H# _; @8 ?9 W4 ^9 \    mcasp->regs->XSTAT = 0x0000ffff; 8 H. S' `/ L- B& x( I
    mcasp->regs->RSTAT = 0x0000ffff;
# D* C; i4 ^) d$ V
$ c4 ]8 L$ G5 Y, N- w+ i    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;. t; _- e1 p: ^4 y5 F: ?0 L+ v
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );; |. x0 n( f5 P; ~$ {$ [$ I
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; , X# S) h" f, K2 I9 {0 y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );) O& w) W% w" p/ X  V" O

" p( f' x9 t) ^6 |    /* Write a 0, so that no underrun occurs after releasing the state machine */1 B) y2 W; i# `
    mcasp->regs->XBUF5 = 0;
' n7 A4 j8 |" @9 ~  s. Y    mcasp->regs->RBUF0 = 0;# J0 e8 }! P, E6 I! q/ v

! N# G; X+ c  E    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 2 v1 o, ?* Z4 x. T1 ?
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );* `0 i% }( D, Z0 |& M8 D, h
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 9 g& j" v- s' S( |) v
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );3 P' M( i* u5 g0 o4 y
. ~2 @4 I) n. p2 K. _* H& c
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
" b6 ?2 d: q& `    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
  U2 U" g5 c; U* n& D: v6 r, M    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 6 m4 ]& J/ X; f& |* x  |  m
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );, d" u9 Q+ D+ x% L
$ C; U1 m# i; k% n& i& F: m+ q
    CSR = 0x0000;
! G6 u1 h4 Y) c% Z    INTC_INTMUX1 = 0x3d;9 h8 P; o& j1 d4 U) r7 n) A
    ISTP = (unsigned int)vectors;8 S) v! c: U* s9 s  n
    ICR = 0xFFF0;  + p4 a7 `' P5 V( A
    IER |= 0x12;  
) V, h5 v& x7 {    CSR |= 0x01;  6 w  c' s+ M* q' ^- M

1 \/ C& n3 b9 W* v5 W- y0 [: @" o9 g) O* S* w

+ D7 ^) ^  I" B2 P* s还有就是两个输入输出函数:9 I5 J' ?: R' q8 y& _. [
void output_sample(Int32 out_data)
! r+ [7 f3 o8 c# k0 H{
* y, ~  s9 G2 @/ O6 C  AIC31_data.uint = out_data;  
2 x7 d" D8 o# @. F  P1 i9 q) R  MCASP1_XBUF5_32BIT = AIC31_data.uint;
# n3 N$ [! q4 u& ]. A9 y& N}, @# I# a) S% }- F" a

! E+ h3 G! Y% l2 }9 g+ e! l1 ^Int32 input_sample(void)  Y4 ?1 H4 n4 \# a7 L. @* f! y
{  
- N, U4 c  |( {3 Q' D. B) v! G  AIC31_data.uint = MCASP1_RBUF0_32BIT;7 i, {2 G5 e1 Q) _; e/ x% W
  return (AIC31_data.uint);
- o5 H& U/ D0 N+ Y$ J+ C9 H! O}
, T8 ?! v# t' w! e8 h4 F+ t& @6 W- G/ u: r! W
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2024-5-23 13:53 , Processed in 0.042477 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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