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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:0 r' M# r( i9 T: [0 p) t' i2 H4 t! t
main文件:4 _1 P, B) Y& o* H) @
interrupt void interrupt4(void)  * k6 c3 S  I% n0 t! H
{5 I0 X* c4 f9 v4 H7 K
  Uint32 sample;
! w% T0 ]+ S: i; Q) h8 h4 V% W, E9 Y  l/ o2 m, N
  sample = input_sample(); // read L + R samples from ADC& I7 S2 I5 t" e& c: D3 s
  output_sample(sample);   // write L + R samples to DAC
1 {/ |! v5 R2 J8 @7 C+ z  return;
. R! H; x1 \' p$ d. _}
3 H5 Y) `! V4 p& f4 a+ l/ T
# v0 r+ M) G" v" @  o+ x& W5 cint main( void ), x2 y. ?+ i3 c2 @& c" [9 t# j
{
( q% y( c6 @. d9 u5 a+ g7 X
' Q4 D+ L8 d) p" C- a. h3 V    /* Initialize BSL */8 ]5 ^$ }+ U( w
    EVMC6747_init( );
7 y. ?+ H' R2 q9 J3 D4 s        /* Call evmc6747_intr function */
- c  _* V# i5 {; v' s    aic3106_init( );
- K, u7 V4 d3 E) L7 o4 j& f* [        while(1);; M8 B+ y  f  V9 Z% L! W+ A
}
4 B) r4 T1 c7 R$ d1 V  Y$ F3 J4 d6 f2 }2 g1 L6 A5 Z: N: y4 Z& b

$ L" {6 O$ J1 g9 b, q- @  Laic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
3 t# a8 ~( x% F' S/* Initialize MCASP1 */# ~9 a6 p) M2 H3 p7 G
    mcasp = &MCASP_MODULE_1;
1 m& ]- w8 a$ X+ g- p( l" m/ i    mcasp->regs->GBLCTL  = 0;       // Reset, K4 t) j- m6 ]1 d& I3 y% h* N
    mcasp->regs->RGBLCTL = 0;       // Reset RX
4 U& n4 M) O# U    mcasp->regs->XGBLCTL = 0;       // Reset TX6 R3 p, Y8 L' q* R9 {
    mcasp->regs->PWRDEMU = 1;       // Free-running# H% n+ W1 r7 W# Q% s; D7 H
   // configure McASP0 receive registers$ z7 Y* i# P2 P: V* V: N+ T. x
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
% k+ G* Z3 I- d+ c( V; M    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus( s8 y3 w7 }6 P- o7 C
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
+ f2 m% m0 |8 B9 I2 @. h( {1 l    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
7 P9 ~  _9 o' R! V" B    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)8 B& t2 l) [8 ?# ^, o: o8 t
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
6 T- J1 y5 Y& R5 F9 \    mcasp->regs->RINTCTL    = 0x00000000; // Not used# K+ x! L, Y' R: S8 }
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
# r$ a# h* y. _+ }" s. w+ L
6 a% K% b: z( s& L7 }. t    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used9 F3 C% S7 ]3 W/ P" N( H) [
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
: D! A7 s( e9 L' o    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
& W4 h: D2 x; k1 L) C& C8 R- B    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
2 D# O% L; y  c+ M% G6 q    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK  s) ^" z8 l3 D
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
" @* H) X7 K- x* x8 m    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit  L4 ~6 A& }% w$ A$ A6 K
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( G5 ]3 D/ D$ e' |8 v" F  S
' f2 O/ {4 F  ?2 }    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN+ Z  e7 k  e& X0 |' W5 b* ?7 ^! S
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
! h5 d2 ^: x4 J* {/ O8 s    mcasp->regs->PFUNC      = 0;          // All MCASPs' h- h" e  u4 |+ w8 s' |  Q/ T
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1) A9 U- q0 K+ \7 p% X

( h- Q4 t+ s) a/ _  K' _: ^    mcasp->regs->DITCTL     = 0x00000000; // Not used
4 ?5 ?! T' S, E0 `* v    mcasp->regs->DLBCTL     = 0x00000000; // Not used7 o( B; z. v- Z% n3 ^7 _7 j. F1 o
    mcasp->regs->AMUTE      = 0x00000000; // Not used
% Q& \: z0 j. c$ p. ^% s/ n/ y; ?
/* Starting sections of the McASP*/
2 |7 y0 C$ z- T# C/ T# p    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
  |( D' I0 a6 |( L% [! \- ]0 K: \    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
6 J7 J8 N! l3 `: j; w    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 6 `0 l: ?  v: z* b; H) b$ F3 P
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
, {5 o1 D3 m* M3 a# C( J& z. }) y4 Q# l2 \/ F: w" n
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; / t+ Z1 G% x0 h. m) ~! T# g
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );1 Q- Y- P  I0 _4 I' {
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
3 b8 j2 }* }9 T4 c    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
4 y. C+ \( H, w. G3 L# G! d* C, P$ n% D& e- {. Y9 o
    mcasp->regs->XSTAT = 0x0000ffff; 8 L1 @( B3 d5 \
    mcasp->regs->RSTAT = 0x0000ffff;
8 G. m1 v1 _7 x# t6 v9 ~' n/ J, G- C- B+ h2 O  N/ o
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;+ x9 [/ @# Q  k- f5 _+ z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );9 @! u& K, K* e% A1 B. i
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
: E9 B  @( Z8 \, o. j( t    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
& m0 T( k9 z' v0 r/ U1 y. ~. x3 V. ~  j/ A
    /* Write a 0, so that no underrun occurs after releasing the state machine */' \) ~: P7 U0 m( I, S: ?8 f
    mcasp->regs->XBUF5 = 0;
+ w6 _" L8 q1 K2 `. N" v& u8 Y0 v    mcasp->regs->RBUF0 = 0;
" _9 g& E' Y9 y
$ Q: n( w  D! j, h( i( y- P    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
/ M9 @) U3 e/ `    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );7 T/ u  A8 r; ]+ u; x) Z0 Q
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; $ j  e2 @8 T2 b+ K
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );& Z) t' U1 H6 o' F: R9 n
4 e/ |7 e: e2 w4 |; c
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; : y8 J' I9 F+ a) v
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
* [3 K! e  [7 x6 p' \: y    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 5 d2 C+ S8 C" h6 x
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
$ n' L' a5 \6 i9 j/ g- y) A5 z% E8 B1 m; b: g8 P5 \" G
    CSR = 0x0000;
* t' W& C# X  I% ?1 U    INTC_INTMUX1 = 0x3d;
7 n# V+ e/ A+ A* f6 F1 F5 N. j    ISTP = (unsigned int)vectors;
; H+ K  O+ {7 u, U( Q    ICR = 0xFFF0;  & S% {, F( B/ @
    IER |= 0x12;  5 X; ]; ~- x' N4 ?0 j: V0 Z
    CSR |= 0x01;  7 I; F. @$ O. m( i$ d4 \# M

+ }: C8 B; y" B3 D
. V0 R0 V! s. o% B
. D! [. V0 b* n) [8 r+ b: i5 w还有就是两个输入输出函数:. |7 K& n" E( T8 r2 ~+ K1 {
void output_sample(Int32 out_data)  {* S8 ?- }! M- {6 ~8 H
{' w. D7 C. `' R+ m( P
  AIC31_data.uint = out_data;  . F# k; x5 ?% e
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
7 U9 }  L% d* F/ a6 w}
0 H0 p# L; I. a( @6 j+ ?+ V* [5 N/ z4 W9 P/ ]" i+ C# i- v
Int32 input_sample(void)3 K0 F+ U& X4 r8 S; k3 X8 {+ |
{  " U  h9 ^, Q6 u
  AIC31_data.uint = MCASP1_RBUF0_32BIT;7 u. C' w- @. E( E4 ]& W
  return (AIC31_data.uint);
+ L8 ]' n  @: u}' u9 v- l# w2 K) `0 U

2 a* F) \7 V( U- y  k% 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-4-8 11:28 , Processed in 0.042211 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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