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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:( J. C. p8 C) F8 `' S$ \, H( c
main文件:* C% d5 o; m- k- ?: j3 W9 A1 u8 f
interrupt void interrupt4(void)  
2 a/ [9 s- R1 i$ o; }$ o{
/ A9 B: ?. O6 _! C" c$ k9 y- I( b- z  Uint32 sample;
4 q) p  ?4 H" o) U1 H: t* s3 D$ f8 i/ |
  sample = input_sample(); // read L + R samples from ADC1 m$ R) C0 G2 o  z
  output_sample(sample);   // write L + R samples to DAC
6 M& y4 ]$ F7 ?; H* ?* d+ P6 k" |  return;
- P/ B' y/ \$ N9 w1 w% [" L; f}1 ?# y! T, }0 f4 B6 ~' \
5 x6 s/ n% K# b3 I( D
int main( void ). ]' w! S; q2 h) _; E
{3 u) _% s: t, N/ H4 o" f
5 j& f6 y- @: j
    /* Initialize BSL */
) \, e& M! {' _+ g) j( F6 Z    EVMC6747_init( );4 `/ `7 y1 O- W! ^3 p4 Y- x6 u
        /* Call evmc6747_intr function */
. L1 `6 o$ U  A( @9 R3 D    aic3106_init( );
4 H/ Z; k3 I% Q. r$ j; t# w        while(1);
0 d6 c6 I; C3 l}/ y6 H4 j* i1 d; Y
# a( g: {& G# [1 U2 ~2 ]
( p# [; b0 y  Z  G3 y
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题( ?5 [, k' D9 i$ B! E" v3 S
/* Initialize MCASP1 */
: k8 L. Q8 T% b! s6 @    mcasp = &MCASP_MODULE_1;0 g' l( q& [* Y0 L0 ?) \
    mcasp->regs->GBLCTL  = 0;       // Reset
3 @8 F7 C& n# \) u$ l4 [    mcasp->regs->RGBLCTL = 0;       // Reset RX+ a& C& X* X6 n; B
    mcasp->regs->XGBLCTL = 0;       // Reset TX
3 H7 O! M6 i; Z' M% J. T; I+ {% R    mcasp->regs->PWRDEMU = 1;       // Free-running0 s% i' ^) F  e6 V
   // configure McASP0 receive registers9 Y8 i2 r8 _( X; D8 G
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used8 T9 y8 V1 B9 Y) y5 \
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus( x& z6 t; g* C9 F  m9 J
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
% s* |/ l+ ~5 V" X' V# J# a    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
% @  `8 ^% w. v    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)0 V5 Q5 w0 d$ g. ^# @( T7 ?
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
. K- C4 _/ m8 [& F# Q& D1 [7 m    mcasp->regs->RINTCTL    = 0x00000000; // Not used& L0 Z" M8 G9 a, ^" F3 F* D  z
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256  a/ A7 V6 m$ ~9 z. c

4 N  Z* Q0 d% l& i7 [    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used" Y* Y, ~( O" T# D( K
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 D, j9 M* k9 ?3 o/ b5 r) H- j. n
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
  N0 ?. K5 M8 M9 E, Y) v( g    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
- c/ c8 o0 K) W% L+ x    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
0 j8 k! H6 G# _+ n/ o5 R! D8 D8 \    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
8 l3 q" ~8 c0 d    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit1 I9 Q) b' i& s' E2 P7 C  A
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( h1 m4 {) K# o5 a: S3 {0 q9 ^: o$ Z+ ~& O! R
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN" h' H+ G" O; `8 }1 g1 j
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT& V+ ~# K0 i2 ]8 ~& \+ G5 L: f0 [* C8 S
    mcasp->regs->PFUNC      = 0;          // All MCASPs; l2 L8 r8 J1 S
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
  M7 D0 H8 Z" o* O/ m7 h- i: i+ X
    mcasp->regs->DITCTL     = 0x00000000; // Not used
: P; }' L! B: z# z1 \" t    mcasp->regs->DLBCTL     = 0x00000000; // Not used
# q* R2 I1 c, d7 W# X0 k! W5 [    mcasp->regs->AMUTE      = 0x00000000; // Not used
4 t! \* P1 i6 d# ]9 n
& s+ P& p( F, m+ F$ E; l- s4 C/* Starting sections of the McASP*/& n3 T8 j* E1 q! w/ ^" y! a
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
( C  g% w( k( f# |, O  ?4 y$ ^/ v    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  6 B6 R2 {( i3 q) E! h
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
0 T: }2 r7 F1 M! F  ]+ n# X2 |    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
' D% C4 l0 o: v. W% x- W% A; x0 u& S0 u5 l) O7 T: Q
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; . _* V* b0 C" `" G3 F7 N* C
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );  ^7 V8 E8 Y% j
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
5 m( b4 z7 L+ C- L    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
  h$ {, n$ F+ T8 A, H) q, E+ {( N/ l( f4 y
    mcasp->regs->XSTAT = 0x0000ffff;
1 |% w3 S: ?5 q) c5 |  W    mcasp->regs->RSTAT = 0x0000ffff;
! p; o8 a3 c2 c* f9 a  o9 E, H, w0 E8 h  V' _4 x
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
3 y! R/ d7 W1 J" ?  `  n+ T    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );5 Z; w8 z/ e, g' _8 [
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; . {( q: `0 [, {+ R7 x" N
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );$ v" L4 K5 e# [; l$ ^/ b: m

/ w2 c, F9 P& j4 `# H    /* Write a 0, so that no underrun occurs after releasing the state machine */  c$ G8 \& g' `
    mcasp->regs->XBUF5 = 0;
% H. l8 E# |  `& Z    mcasp->regs->RBUF0 = 0;7 u0 m3 i  r2 \2 p# j

) U6 j/ B/ W& x8 ?8 z1 F" D    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 7 W5 g' J, c& |
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
0 P" t3 m0 Q5 S* f    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ! [! @9 K" \# g3 r
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );: N; {6 \. U: A
8 }5 F5 W5 `! w+ j" W- o3 u1 s" n5 u4 B
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
9 t& |2 ?- b. Z3 }9 ?    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
3 Z% I% w* ^5 z    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
/ R+ s% L* l5 b+ K9 k% N& a2 s    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
8 }6 Y, [! C6 r& Z- n' }* Y) D' u6 \1 u
    CSR = 0x0000;! G3 ~9 C7 F$ v$ V3 o4 k, O- Z
    INTC_INTMUX1 = 0x3d;
+ d2 L) i2 R* ]' h7 J: R& Y2 f    ISTP = (unsigned int)vectors;0 M5 @. }) u# u' B
    ICR = 0xFFF0;  
+ N2 g2 V( B1 `4 d- v    IER |= 0x12;  . S6 f8 t5 B; p0 ]6 D% g) n
    CSR |= 0x01;  
7 V2 t* j  g8 p$ O
1 E+ K+ v* T( \2 A4 b) e% {+ ]7 I! I# a$ q3 G2 |$ B  O
! o; A6 y2 \, a1 ?
还有就是两个输入输出函数:
9 [. n, B  v, {8 p$ i) B" O2 hvoid output_sample(Int32 out_data)
# H; d; c4 c- f# V2 ~* I" x{8 E' I; S$ O/ f
  AIC31_data.uint = out_data;  + F8 M& _' E4 ]! D8 G  B. Z  N
  MCASP1_XBUF5_32BIT = AIC31_data.uint;$ ~! ~, [' E% _! O% d
}
, _4 D: T. M+ `/ _6 K7 s
0 v) N" f5 Y, `7 d) N7 kInt32 input_sample(void)
; U& n  o% S. I! f4 D{  & D  Q4 T5 y% R* W
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
' f# g! N0 v7 F' t, M  return (AIC31_data.uint);- S2 v. T# F; }# i/ [5 ^
}
( O+ {+ _' K% a  ?# m
, {0 ?# q4 z, m, _
分享到:  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-10 13:46 , Processed in 0.039637 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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