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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:# A; Y- E- o5 ^8 t" }7 a" P3 ^
main文件:& r2 U" X* n; e, z) r
interrupt void interrupt4(void)  1 Z1 S& N' o. F9 B6 e' _; Q
{$ E. X/ }8 g7 d3 }# P. i' A
  Uint32 sample;
: H* q/ H. m) ?7 A+ F) C: O7 O" B- V9 ?3 s4 n3 h: K& i
  sample = input_sample(); // read L + R samples from ADC
( O0 p6 g. \; h% X3 _! A" I  output_sample(sample);   // write L + R samples to DAC
! w, b) N: L; F$ o3 e6 ?' z  return;4 W5 Q+ j; ^  i* E
}2 j' c8 i' X8 `/ }" w# X. r, L# B

) t8 u% ^# k8 H; e& ~. D# `: P+ yint main( void )0 W2 n  \$ D6 B! N4 z. J* r2 o# P  @
{
6 c* Y1 g7 d6 [: |9 P' ~
- b! V" y$ o" h# Z1 ~    /* Initialize BSL */; r: ?# i: {9 j
    EVMC6747_init( );
! Y3 @6 G, ~8 \+ P& K        /* Call evmc6747_intr function */
( r; K& t8 l( s+ i" I- Y  z    aic3106_init( );3 U) }% ?/ r6 `' T1 K/ O
        while(1);
# a1 y2 j$ X. ^( K9 K% d( X( y}
% L5 p2 M, s) ^" e0 D
5 C8 r9 u! F6 j4 l8 `5 A% X" D& o9 R- V
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题1 @% y& h3 `5 h0 M
/* Initialize MCASP1 */! D- {; v  c; K$ n" U
    mcasp = &MCASP_MODULE_1;' e; k- o, D' Q/ t* o; R8 i
    mcasp->regs->GBLCTL  = 0;       // Reset1 @$ e) m7 ~- P- |5 \, z& C7 X/ T
    mcasp->regs->RGBLCTL = 0;       // Reset RX
, A$ R, `6 F0 g. [% g    mcasp->regs->XGBLCTL = 0;       // Reset TX8 U( i0 [8 f" V0 q- X' {& r$ K
    mcasp->regs->PWRDEMU = 1;       // Free-running/ J/ Z5 C; }; G' c
   // configure McASP0 receive registers
' u, @( o6 K. \- `    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
3 M/ U7 @  Q+ k1 F, C; {    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 [. g$ b( W: z" ?
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
$ E* [3 {) O* |    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)8 U+ |4 C% ^9 j
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
$ i3 F/ x  n  y' x    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1" r+ i1 {) A3 ?2 E" g9 |
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
# @' W, ]+ _$ E8 ]8 l    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2569 f5 Y- G" J3 Y+ H# j, b0 |) ^

1 K7 Y/ H5 }4 R. V9 l6 P# |; ^    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used/ S$ [& ~% s2 ?$ v0 q+ G$ t7 m
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 X/ M9 Y+ ^7 C* m# O    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word7 K+ ?& n# V+ X& c, ?' k8 |
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
  G6 a2 q! W$ W  W+ f2 M    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
7 H7 l' [# Y. I5 b; D* L    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
1 v/ ?) ^2 X1 z( a    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
: G- `, [  s, c7 V    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% U8 v2 }5 \) Y6 P9 ]. b9 W" k

* r% J* I) b, a: M. W    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN, T0 \! \  M, p" I/ `
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT& x; Y) B& V/ V& D, F! v/ M
    mcasp->regs->PFUNC      = 0;          // All MCASPs5 i  U: y, u- q. k5 u* {, x
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
1 ^$ M5 q- @( L5 l( I1 z3 m# p2 O
    mcasp->regs->DITCTL     = 0x00000000; // Not used
8 o+ A0 H- \* \: K3 o: a  W, M    mcasp->regs->DLBCTL     = 0x00000000; // Not used" Z9 `. {! \. E
    mcasp->regs->AMUTE      = 0x00000000; // Not used, {, H+ q+ S4 B2 k2 t- T3 e

% X* O% y0 f+ {/* Starting sections of the McASP*/8 e& L+ P4 A. S( t: x
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; # j+ y* }) k1 W$ o9 c
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ' Z8 J* G6 Y/ S) x" ^, c( z, @
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 0 t  ^$ _1 ]: K" Q- c+ Y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
9 p! w3 H) x7 {/ _
7 q% I6 A/ P( R9 Q! J, X# w    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; & d8 S9 K- e! ]- W( g
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
0 g' |( v1 K! T/ K. \$ T+ v    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; * I- y, V1 J2 l* I2 l
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );4 ^8 J# l9 B/ e% a$ L  R% _

. V# @2 X+ a# E" q& e" {    mcasp->regs->XSTAT = 0x0000ffff; # `+ `4 e9 P" y
    mcasp->regs->RSTAT = 0x0000ffff;
/ e4 O+ P# \6 \7 S' Y) _4 h, z, T; e- `  {
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
8 S, y$ B( H7 Z& {1 F2 s, o    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );* Y5 K. W" ?+ s: Q" D
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 9 N9 i0 ^) t! J' B' i9 e
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );+ T# e* x% k# K4 [+ L

2 M7 z# N: L1 R    /* Write a 0, so that no underrun occurs after releasing the state machine */! `" O4 p* {4 r
    mcasp->regs->XBUF5 = 0;
; _0 L! \( B: r: M' N( O    mcasp->regs->RBUF0 = 0;
  W# \+ {! t( `3 k/ {7 l* h4 w( w4 s" t& |" U$ L! _2 |! Y  F( E
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ) z4 w2 D& z9 }  D6 s# J
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );, H0 a+ o  y9 x% T9 z0 Z
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
# m9 T8 `: k: `3 A' X5 s    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
7 @  c, D) o$ `  J1 S/ i$ v
' s0 V. I+ g% R/ |; w* x+ C. f" q# j    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; $ c, x: ~9 X* U/ L
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
% B  \1 O" g% F' C7 k+ f0 {    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
8 P$ ^9 _8 d) m  g; V9 q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );' n2 K# J3 J: t0 k9 F# V4 f
+ O/ X* |( P+ y9 ]( _
    CSR = 0x0000;
( u* H4 d$ v. g; T) `/ F9 ~) |    INTC_INTMUX1 = 0x3d;
% w; ^- B& o7 g9 ]0 N  E    ISTP = (unsigned int)vectors;" w- v" I5 w; f7 l  o! k" }& V
    ICR = 0xFFF0;  
4 c4 j" W" m& G$ _    IER |= 0x12;  
& z  X8 K5 {  w& ?$ @  Z* m: q    CSR |= 0x01;  " s' i5 c3 Z" |; B; P* G- D

# A$ D2 {. K* u( x" t' h% f1 \, A4 f: D3 ?' q1 M. ]! Q* M4 u

# G8 _5 s" J# u) B+ Q还有就是两个输入输出函数:* i- j0 p1 s7 {5 o
void output_sample(Int32 out_data)% C) m6 k, j* e9 E! v8 i
{4 @! Q6 t7 `: L$ C) j, P: ?* h) _
  AIC31_data.uint = out_data;  ) J7 f7 |! d, u9 g
  MCASP1_XBUF5_32BIT = AIC31_data.uint;9 p. W) }/ C) [3 H% e( Y
}
3 j3 p3 z9 d" `* H0 |; l
" ~% b' ?6 G; P- zInt32 input_sample(void)) j. H$ m( n6 F" O: t6 p
{  
  n4 ?7 A+ q- J1 o/ ~) v  AIC31_data.uint = MCASP1_RBUF0_32BIT;
; D+ O6 P; r4 |; g/ S. |. k  return (AIC31_data.uint);' G% c0 a9 x+ Z' l. x& ^
}1 l/ D6 P$ \- P" w& f

& R: z; T+ H0 b
分享到:  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-24 20:54 , Processed in 0.042305 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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