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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:7 T9 S* v4 `! y% I
main文件:4 o1 ]& T' p; _! {" P5 z
interrupt void interrupt4(void)    M# O+ p) b0 L3 j& }
{5 x2 y$ ?, Q: z/ f4 t4 g, s& A
  Uint32 sample;
7 O3 l% _$ ]' I" M/ ]8 e
4 k: v, P& q* ?1 i5 t( K5 D5 a  sample = input_sample(); // read L + R samples from ADC
# s9 E- s! W8 d* v8 P0 |" m3 ?) }  output_sample(sample);   // write L + R samples to DAC
  P/ \9 B5 K/ g- H4 L/ B  return;
& Q' q- U# k1 e& y9 V8 t0 f1 X5 r}
# e/ Z: W- v3 c& d4 M/ t( i& B: I5 A
int main( void )
8 t) }1 [. ]. Z: g/ T{
, N) Q; d' l* e
  Q) T" B# B" N    /* Initialize BSL */
  y4 t$ c/ d9 P    EVMC6747_init( );- N1 T" l8 i1 r. r0 H' |
        /* Call evmc6747_intr function */
5 l9 Q# v$ h1 s# p) T0 C9 F7 L    aic3106_init( );+ `+ a# \4 w% m% |
        while(1);
5 O1 c/ [  c! ?; |9 w}
2 k: ?" O; |  m' H+ z5 N: j1 t9 M: b! [! n
) t+ ?0 m" O4 j; j: k
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题  T- h+ b4 I+ |5 o$ w- a  q. K2 G4 a
/* Initialize MCASP1 */
$ U  I# _3 @1 u, V8 K! r4 B    mcasp = &MCASP_MODULE_1;
  z8 g) F& j9 c    mcasp->regs->GBLCTL  = 0;       // Reset
4 p9 n3 O8 W' p1 ]0 v, R: X% }    mcasp->regs->RGBLCTL = 0;       // Reset RX
/ ^, {3 ]  G+ l3 x    mcasp->regs->XGBLCTL = 0;       // Reset TX* ~3 V! C8 {- X5 E4 c
    mcasp->regs->PWRDEMU = 1;       // Free-running
* k1 \$ ~6 a+ z9 _, B/ W0 C$ P- y   // configure McASP0 receive registers4 E4 |# W  B8 \" u
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
! q0 z' y) ~2 k# Z/ w: H  k# G8 F3 r1 }    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 n2 Y$ q& Y2 g
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word7 n1 G' p, Q0 D8 s/ n
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)0 _3 ^/ A$ e& Z( r% I4 H
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
7 A3 b+ n1 Q; g    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1( i! z/ l5 M! f" ]3 E& \5 v/ x
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
9 ^. Y: I. C3 F" x) K& M    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- ^) `9 S% b1 m( l

, @1 m4 [6 h1 Q2 N    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used9 s8 J9 f2 ]% w# X3 H
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 Y4 A. e) D& l0 `" o$ a- \    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
% y9 l( N. l' l. H2 t: W' N    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16$ p4 p8 r; x# l$ i" U
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
1 ?# F' E9 r! ^    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
3 x- J8 @, [6 E4 X    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
2 H3 V, X" z' Z: M    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
7 w% v- J4 @) I! Q9 r3 ?! A+ {) J. x1 d- ^* o) |
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
3 ]3 Z. H2 t( y# [) B    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
1 ]9 c' H1 q' L3 Y5 g) E0 |    mcasp->regs->PFUNC      = 0;          // All MCASPs
) ]* W+ b: t% G; M+ a+ s' z9 a$ r    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1" A. M! y% y6 a1 V# |! E
' o2 a% c  O! k
    mcasp->regs->DITCTL     = 0x00000000; // Not used
+ Z: p  s) I& a" |    mcasp->regs->DLBCTL     = 0x00000000; // Not used$ l1 w6 [- b$ {1 H/ z9 \& S" k
    mcasp->regs->AMUTE      = 0x00000000; // Not used5 W5 W# E. I$ x) x! _# {

$ ]9 D& }0 s  k) x6 u/* Starting sections of the McASP*/
4 L1 A* z9 I& G* O% W    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
! K# v7 }+ N5 n  Y- x    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
8 U8 F  T: \6 m. U, b    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
$ R. G5 a1 k# J* c: @    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
9 I! v9 A; N0 F; t2 `
  F, j3 q! D. l# {    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 7 |3 m; e  D. c- g  D6 m. P# p
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );2 s* u1 e( Y* w! T$ |
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 5 l( t' S+ j: r1 X& {
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );: I3 j  l0 R' K( n
) i) V, q" s8 H
    mcasp->regs->XSTAT = 0x0000ffff;
( b3 L1 A5 ]. O/ F    mcasp->regs->RSTAT = 0x0000ffff; " }. r* R! |9 `* t- i
) p  ]+ M1 o. D% N2 r
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
' J: |9 ^7 V1 y. `( J1 L/ z. V6 f    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
% Y& r4 L+ c6 ?0 ]    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; " ~! m: ^1 s6 S* `$ u. G
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
+ S: O/ y5 v2 Y0 ]9 U7 n6 a0 G3 Q' L; N) V0 ~! U
    /* Write a 0, so that no underrun occurs after releasing the state machine */6 _+ ], d" v- i1 K  s  t
    mcasp->regs->XBUF5 = 0;
7 ?: y. V' V0 n" w5 c: ?8 ?& ]    mcasp->regs->RBUF0 = 0;
5 q, S3 h, `2 D1 t0 X4 x
' c2 I0 S2 F9 m* T    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; + ]0 v2 J6 P) H$ L9 L' I
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );7 H5 [. v1 e& y; S" E7 [
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; / C6 N1 T0 _8 c) }. O5 J& m
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
  o7 n$ K+ ~  ~% M3 G; f, }2 k. B; j+ n
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
0 S# U& B& V; a/ {. O; D1 i    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
  n/ ]7 |9 ~/ p# X0 q    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
# `. b# H# q" i    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );! b5 R+ `: I$ I  r- K( A

0 o9 j# N5 V2 j( n    CSR = 0x0000;
) U$ U6 \- k1 g* q    INTC_INTMUX1 = 0x3d;4 t4 O. w" a" `
    ISTP = (unsigned int)vectors;
! Z# q& }# q" Z8 E: F    ICR = 0xFFF0;  
4 Z3 s, B  M3 Z; V8 N- [    IER |= 0x12;  
0 }/ P& R( s3 n6 @( l    CSR |= 0x01;  7 }* U. F' w! L1 Q2 n$ M
- V. b1 d1 ~1 M$ K

- L2 b8 B- m* A1 q) U) _% r- g9 m/ b* r% S3 I) X2 Q; k
还有就是两个输入输出函数:
5 B! q' y3 H; V- o2 U- J; qvoid output_sample(Int32 out_data)
8 r% W" X& w+ d  m4 J. B{* @$ E+ n3 s# _
  AIC31_data.uint = out_data;  ; L# P$ s- g9 K# j
  MCASP1_XBUF5_32BIT = AIC31_data.uint;' t9 L7 _' V* }0 s
}1 S2 j3 G. q# ^2 I" |% S

" u! m6 h' T- [( _9 SInt32 input_sample(void)9 X5 P! d, G, ^& N% s
{  
  x& j1 A. _9 Y  AIC31_data.uint = MCASP1_RBUF0_32BIT;( ^" O! P* x! S8 B" O! ^: |  w( O
  return (AIC31_data.uint);
% r7 j. b) i5 c1 }}
4 N+ K9 W2 G( R- M  a) W
' d$ F' s5 B8 x5 r
分享到:  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, 2025-10-23 08:35 , Processed in 0.038867 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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